blob: de83a92496697ccab11bb76b4ea5346f2c57c513 [file] [log] [blame]
#ifndef __WDONG_SHASH__
#define __WDONG_SHASH__
#include <cass_file.h>
#include <cass_array.h>
typedef ARRAY_TYPE(int) bucket_t;
/* open hash */
typedef struct
{
cass_size_t size;
bucket_t *bucket;
} ohash_t;
static inline void ohash_init (ohash_t *ohash, cass_size_t size)
{
int i;
ohash->size = size;
ohash->bucket = malloc(size * sizeof(*ohash->bucket));
assert(ohash->bucket != NULL);
for (i = 0; i < size; i++)
{
ARRAY_INIT(ohash->bucket[i]);
}
}
static inline void ohash_cleanup (ohash_t *ohash)
{
int i;
for (i = 0; i < ohash->size; i++)
{
ARRAY_CLEANUP(ohash->bucket[i]);
}
free(ohash->bucket);
}
static inline void ohash_insert (ohash_t *ohash, int hash, int val)
{
int *ent;
size_t len, i;
ARRAY_BEGIN_WRITE_RAW(ohash->bucket[hash % ohash->size], ent, len);
for (i = 0; i < len; i++)
{
if (ent[i] == val)
{
break;
}
}
if (i >= len)
{
len++;
ARRAY_APPEND(ohash->bucket[hash % ohash->size], val);
}
ARRAY_END_WRITE_RAW(ohash->bucket[hash % ohash->size], len);
}
int ohash_init_with_file (ohash_t *ohash, const char *filename);
int ohash_dump_file (ohash_t *ohash, const char *filename);
int ohash_init_with_stream (ohash_t *ohash, CASS_FILE *);
int ohash_dump_stream (ohash_t *ohash, CASS_FILE *);
int ohash_init_with_txt (ohash_t *ohash, const char *filename);
int ohash_dump_txt (ohash_t *ohash, const char *filename);
int ohash_init_with_txt_stream (ohash_t *ohash, CASS_FILE *);
int ohash_dump_txt_stream (ohash_t *ohash, CASS_FILE *);
void ohash_stat (ohash_t *ohash);
#endif