■
とりあえず
ドッカンバトルのコード部分を転記。
「ドラゴンボールZ ドッカンバトル」「出現キャラ一覧」及び「出現キャラ提供割合」の表示に関する不具合の詳細
CardDatas CardModel:getMasterCardDatasByIds(const std:Vector& masterCardIds) Const { vector results; results.resize(masterCardIds.size()); size_t exists = 0, for (inti = 0; i < masterCardIds.size(); i++){ auto p = results[i] = cardDataCache.fetch(masterCardIds[i]); if (p != nulptr) { exists++; } } if (masterCardIds.size() == exists) { return results; } string sq = form("SELECT * FROM cache.cards where id IN (%s)", join(masterCardIds, ",").c_str()); int i = 0; DatabaseManager::getInstance()->query(sql, [this, &results, &i](sqlite3_stmt* stmt) { if(results[i]==nulptr) { results[i] = CardDataCache.store(make_shared (stmt)); } i++; } return results; }
わかるところだけ推測でコメント付け足すとこんな風?違ってたらごめんなさいで。
//masterCardIds: 全カードのIDの配列 CardDatas CardModel:getMasterCardDatasByIds(const std:Vector& masterCardIds) Const { vector results; //カード情報の配列 results.resize(masterCardIds.size());//配列のサイズ決定 size_t exists = 0; //メモリ上に存在するカードIDの数 //メモリ上に存在するカードIDの数をカウントする //cardDataCacheがおそらくメモリ上のデータ for (int i = 0; i < masterCardIds.size(); i++){ //メモリに既にあるデータをカウント、格納 auto p = results[i] = cardDataCache.fetch(masterCardIds[i]);//該当するIDがあるかチェック if (p != nulptr) { exists++; } } //全データがメモリにある場合には更新なしで終了。 if (masterCardIds.size() == exists) { return results; } //以下、不足データがある場合、ストレージ(DB?)から差分を追加する(はずだった)処理 //DBから全カード情報を読みだすSQL文の組み立て string sql = form("SELECT * FROM cache.cards where id IN (%s)", join(masterCardIds, ",").c_str()); int i = 0; //この先が読めない。stmtどこ? DatabaseManager::getInstance()->query(sql, [this, &results, &i](sqlite3_stmt* stmt) { if(results[i]==nulptr) { results[i] = CardDataCache.store(make_shared (stmt)); } i++; } return results; }