Пример #1
0
local void init_players()
{
	Player *p;
	Link *link;

	pd->Lock();
	FOR_EACH_PLAYER(p)
	{
		PData *pdata = PPDATA(p, pdata_key);
		pdata->vars = HashAlloc();
	}
	pd->Unlock();
}
Пример #2
0
local int cmd_players(int argc, char *argv[])
{
    players_hash = HashAlloc();

    walk_db(players_get_names, FALSE);

    printf("    this database contains information about these players:\n");
    printf("  %-18.18s  %-17s\n",
           "player name",
           "records / bytes");

    HashEnum(players_hash, players_print_names, NULL);
    HashFree(players_hash);

    return 0;
}
Пример #3
0
local FlagTeam *CreateFlagTeam(Arena *a, int freq)
{
	DEF_AD(a);

	FlagTeam *team = amalloc(sizeof(FlagTeam));
	team->Arena = a;
	team->Freq = freq;
	team->DroppedFlags = 0;
	team->FlagSeconds = 0;
	team->Breakdown = HashAlloc();

	MYGLOCK;
	LLAdd(ad->FlagTeams, team);
	MYGUNLOCK;

	return team;
}
Пример #4
0
local int cmd_arenas(int argc, char *argv[])
{
    arenas_hash = HashAlloc();

    walk_db(arenas_get_names, FALSE);

    printf("    this database contains information about these arenas:\n");
    printf("  %-14.14s  %-17s  %-17s  %-17s\n",
           "arena name",
           "player recs/bytes",
           " arena recs/bytes",
           " total recs/bytes");

    HashEnum(arenas_hash, arenas_print_names, NULL);
    HashFree(arenas_hash);

    return 0;
}
Пример #5
0
local void player_action(Player *p, int action, Arena *arena)
{
	PData *pdata = PPDATA(p, pdata_key);

	if (action == PA_CONNECT)
	{
		FormulaVariable *var = amalloc(sizeof(FormulaVariable));
		var->name = astrdup("me");
		var->type = VAR_TYPE_PLAYER;
		var->p = p;
		pdata->vars = HashAlloc();
		HashAdd(pdata->vars, var->name, var);
	}
	else if (action == PA_DISCONNECT)
	{
		HashEnum(pdata->vars, var_free_enum, NULL);
		HashFree(pdata->vars);
	}
}
Пример #6
0
local int cmd_serials(int argc, char *argv[])
{
    serials_ag = argv[1];

    if (!serials_ag)
    {
        puts("you must specify an arena name");
        return 1;
    }

    serials_hash = HashAlloc();

    walk_db(serials_get_names, FALSE);

    printf("  for arena %s, interval %s, these serials are defined:\n",
           serials_ag, get_interval_name(args.iv));

    HashEnum(serials_hash, serials_print_nums, NULL);
    HashFree(serials_hash);

    return 0;
}
Пример #7
0
Файл: hash.c Проект: HanaHosoe/c
int main(void) {
    int size = 0, h;
    char cmd, key[1024], value[1024], buf[1024];
    Hash *hash;

    // ハッシュテーブルの生成
                 
    printf("ハッシュテーブルの大きさを入力して下さい: ");
    scanf("%d", &size);
    
    if (size < 1) return -1;// 入力数エラー
    hash = HashAlloc(size);
    if (hash == NULL) return -1;    // メモリ確保失敗

    puts("* ハッシュテーブルを操作するコマンドを入力して下さい.");
    puts("* データを格納:a");
    puts("* キーを削除:x");
    puts("* キーに対応するデータの取得:g");
    puts("* ハッシュテーブルを表示:d");
    puts("* ハッシュ値の表示:h");
    puts("* ハッシュテーブルをクリア:c");
    puts("* 終了:q");
                                
    do {
        printf(": ");
        scanf("%s", buf);
        cmd = buf[0];

        switch (cmd) {
            case 'a':   /* データを格納 */
                printf("名前を入力して下さい:");
                scanf("%s", key);
                printf("血液型を入力して下さい:");
                scanf("%s", value);

                if (HashAdd(hash, key, value) == TRUE) {  // hash, name, blood-type
                    printf("%s=%sを格納しました.\n", key, value);
                } else {    /* 衝突 */
                    printf("既に同じキーを持つデータが存在します.\n");
                }
                break;
            case 'd':   /* データを表示 */
                HashDump(hash);
                break;
            case 'c':   /* ハッシュテーブルをクリア */
                HashClear(hash);
                break;
            case 'x':   /* キーを削除 */
                printf("誰を削除しますか?:");
                scanf("%s", key);
                if(HashDelete(hash, key) == TRUE) {
                    printf("%sを削除しました.\n", key);
                }
                else {
                    printf("%sは登録されていません.\n", key);
                }
                break;
            case 'g':   /* キーに対応するデータを取得 */
                printf("名前を入力して下さい:");
                scanf("%s", key);
                if (HashGet(hash, key, value) == TRUE) {
                    printf("%sの血液型は%sです.\n", key, value);
                } else {
                    printf("%sは登録されていません.\n", key);
                }
                break;
            case 'h':   /* キーに対応するデータを取得 */
                printf("名前を入力して下さい:");
                scanf("%s", key);
                h = HashCode(hash, key);
                printf("%sのハッシュ値は%dです.", key, h);
                break;
            case 'q':   /* 終了 */
                puts("プログラムを終了します.");
                break;
            case '\n':  /* 改行 */
            case '\r':  /* 復帰 */
                break;
            default:    /* 入力エラー */
                puts("コマンドが正しくありません.");
                break;
        }
    } while (cmd != 'q');

    HashDump(hash); // 解放前の出力
    HashFree(hash); // メモリ解放

    return 0;
}