/* ARISA - Nick Hashing Structure and Function Definitions */ /* Copyright (C) 2003 Carl Ritson */ #define _ARISA_NICKHASH_H enum mode_t { MODE_UNKNOWN = 0x0, MODE_REG = 0x0, MODE_VOICE = 0x2, MODE_HOP = 0x4, MODE_OP = 0x8, MODE_ANTIKICK = 0x10, MODE_OWNER = 0x20, MODE_ADD, MODE_DEL, MODE_SET }; /* Structures */ typedef struct chanmode_t { channel_t *channel; int mode; } chanmode_t; typedef struct nickmode_t { char *nick; int mode; } nickmode_t; typedef struct nh_bucket_t { unsigned long hash; char *nick; chanmode_t *cms; int no_cms; struct nh_bucket_t *next; } nh_bucket_t; typedef struct nickhash_t { lock_t lock; nh_bucket_t **table; unsigned int size; unsigned int no_buckets; } nickhash_t; /* Functions */ int mode_from_char(char c); int mode_from_str(const char *str); char *str_from_mode(char *buffer, size_t bufsize, int mode); nickhash_t *nickhash_init(void); void nickhash_flush(nickhash_t *ht); void nickhash_free(nickhash_t *ht); int nickhash_present_mode(nickhash_t *ht, channel_t *chan, const char *nick, int *mode); int nickhash_present(nickhash_t *ht, channel_t *chan, const char *nick); void nickhash_add_mode(nickhash_t *ht, channel_t *chan, const char *nick, int mode); void nickhash_add(nickhash_t *ht, channel_t *chan, const char *nick); void nickhash_del(nickhash_t *ht, channel_t *chan, const char *nick); void nickhash_flush_channel(nickhash_t *ht, channel_t *chan); void nickhash_rename(nickhash_t *ht, const char *onick, const char *nnick); void nickhash_change_mode(nickhash_t *ht, channel_t *chan, const char *nick, int op, int mask); int nickhash_highest_mode(nickhash_t *ht, const char *nick); int nickhash_query_nick(nickhash_t *ht, const char *nick, chanmode_t **cms); int nickhash_query_channel(nickhash_t *ht, channel_t *chan, nickmode_t **nms);