summaryrefslogtreecommitdiff
path: root/src/char/int_storage.cpp
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2013-02-23 14:28:21 -0800
committerBen Longbons <b.r.longbons@gmail.com>2013-02-23 15:13:16 -0800
commit1e77f5dc8d95bbf912205c85274d294a80ea65c9 (patch)
tree054aa52764297b205431dfe82119a7f3e5e7ecd1 /src/char/int_storage.cpp
parent25823b36905a84d92f9299ba7f9f0c713141c8fb (diff)
downloadtmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.tar.gz
tmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.tar.bz2
tmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.tar.xz
tmwa-1e77f5dc8d95bbf912205c85274d294a80ea65c9.zip
Replace struct dbt with typesafe std::map wrappers
Also fix broken save/accreg.txt reading.
Diffstat (limited to 'src/char/int_storage.cpp')
-rw-r--r--src/char/int_storage.cpp40
1 files changed, 12 insertions, 28 deletions
diff --git a/src/char/int_storage.cpp b/src/char/int_storage.cpp
index 9ca841f..b7feae1 100644
--- a/src/char/int_storage.cpp
+++ b/src/char/int_storage.cpp
@@ -20,7 +20,7 @@
char storage_txt[1024] = "save/storage.txt";
static
-struct dbt *storage_db;
+Map<int, struct storage> storage_db;
// 倉庫データを文字列に変換
static
@@ -83,14 +83,11 @@ bool extract(const_string str, struct storage *p)
// アカウントから倉庫データインデックスを得る(新規倉庫追加可能)
struct storage *account2storage(int account_id)
{
- struct storage *s;
- s = (struct storage *) numdb_search(storage_db, account_id);
+ struct storage *s = storage_db.search(account_id);
if (s == NULL)
{
- CREATE(s, struct storage, 1);
- memset(s, 0, sizeof(struct storage));
+ s = storage_db.init(account_id);
s->account_id = account_id;
- numdb_insert(storage_db, s->account_id, s);
}
return s;
}
@@ -101,8 +98,6 @@ int inter_storage_init(void)
{
int c = 0;
- storage_db = numdb_init();
-
std::ifstream in(storage_txt);
if (!in.is_open())
{
@@ -113,17 +108,15 @@ int inter_storage_init(void)
std::string line;
while (std::getline(in, line))
{
- struct storage *s;
- CREATE(s, struct storage, 1);
- if (extract(line, s))
+ struct storage s {};
+ if (extract(line, &s))
{
- numdb_insert(storage_db, s->account_id, s);
+ storage_db.insert(s.account_id, s);
}
else
{
PRINTF("int_storage: broken data [%s] line %d\n",
storage_txt, c);
- free(s);
}
c++;
}
@@ -132,9 +125,9 @@ int inter_storage_init(void)
}
static
-void inter_storage_save_sub(db_key_t, db_val_t data, FILE *fp)
+void inter_storage_save_sub(struct storage *data, FILE *fp)
{
- std::string line = storage_tostr((struct storage *) data);
+ std::string line = storage_tostr(data);
if (!line.empty())
FPRINTF(fp, "%s\n", line);
}
@@ -146,32 +139,23 @@ int inter_storage_save(void)
FILE *fp;
int lock;
- if (!storage_db)
- return 1;
-
if ((fp = lock_fopen(storage_txt, &lock)) == NULL)
{
PRINTF("int_storage: cant write [%s] !!! data is lost !!!\n",
storage_txt);
return 1;
}
- numdb_foreach(storage_db, std::bind(inter_storage_save_sub, ph::_1, ph::_2, fp));
+ for (auto& pair : storage_db)
+ inter_storage_save_sub(&pair.second, fp);
lock_fclose(fp, storage_txt, &lock);
// PRINTF("int_storage: %s saved.\n",storage_txt);
return 0;
}
// 倉庫データ削除
-int inter_storage_delete(int account_id)
+void inter_storage_delete(int account_id)
{
- struct storage *s =
- (struct storage *) numdb_search(storage_db, account_id);
- if (s)
- {
- numdb_erase(storage_db, account_id);
- free(s);
- }
- return 0;
+ storage_db.erase(account_id);
}
//---------------------------------------------------------