Skip to content

Commit

Permalink
add a new PAIR macro to replace LwqqTypeMap
Browse files Browse the repository at this point in the history
  • Loading branch information
xiehuc committed Feb 24, 2015
1 parent 9e68c67 commit eb91b5b
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 36 deletions.
2 changes: 2 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ IndentWidth: 3
---
Language: Cpp
PointerAlignment: Left
ColumnLimit: 80
AllowShortBlocksOnASingleLine: true
...
20 changes: 10 additions & 10 deletions lib/msg.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,16 +79,16 @@ static struct LwqqTypeMap msg_type_map[] = {
//this table defines unsecape rule in send
static
TABLE_BEGIN_LONG(unescape, const char*, const char, "")
TR('\n', "\\\\n");
TR('\r', "\\\\n");
TR('\t', "\\\\t");
TR('\\', "\\\\\\\\");
TR(';', "\\u003B");
TR('&', "\\u0026");
TR('"', "\\\\\\\"");
TR('+', "\\u002B");
TR('%', "\\u0025");
TR('\'', "\\u0027");
TR('\n', "\\\\n");
TR('\r', "\\\\n");
TR('\t', "\\\\t");
TR('\\', "\\\\\\\\");
TR(';', "\\u003B");
TR('&', "\\u0026");
TR('"', "\\\\\\\"");
TR('+', "\\u002B");
TR('%', "\\u0025");
TR('\'', "\\u0027");
TABLE_END()

static void group_member_has_chged(LwqqClient* lc,LwqqGroup* g)
Expand Down
25 changes: 13 additions & 12 deletions lib/type.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,17 @@ const char* lwqq_version = LWQQ_VERSION;

#define HASH_ENTRY_SIZE 8

static struct LwqqTypeMap status_type_map[] = {
{LWQQ_STATUS_ONLINE ,"online", },
{LWQQ_STATUS_OFFLINE ,"offline", },
{LWQQ_STATUS_AWAY ,"away", },
{LWQQ_STATUS_HIDDEN ,"hidden", },
{LWQQ_STATUS_BUSY ,"busy", },
{LWQQ_STATUS_CALLME ,"callme", },
{LWQQ_STATUS_SLIENT ,"slient", },
{LWQQ_STATUS_LOGOUT ,NULL, }
};
#define key_eq(a,b) (a==b)
#define val_eq(a,b) (strcmp(a,b)==0)
PAIR_BEGIN_LONG(lwqq_status, int, const char*)
PAIR(LWQQ_STATUS_ONLINE , "online")
PAIR(LWQQ_STATUS_OFFLINE, "offline")
PAIR(LWQQ_STATUS_AWAY , "away")
PAIR(LWQQ_STATUS_HIDDEN , "hidden")
PAIR(LWQQ_STATUS_BUSY , "busy")
PAIR(LWQQ_STATUS_CALLME , "callme")
PAIR(LWQQ_STATUS_SLIENT , "slient")
PAIR_END(lwqq_status, int, const char*, LWQQ_STATUS_LOGOUT, NULL)

static char* generate_random_id(int length)
{
Expand All @@ -72,13 +73,13 @@ static char* generate_random_id(int length)
LWQQ_EXPORT
const char* lwqq_status_to_str(LwqqStatus status)
{
return lwqq_util_mapto_str(status_type_map, status);
return lwqq_status_to_val(status);
}

LWQQ_EXPORT
LwqqStatus lwqq_status_from_str(const char* str)
{
return lwqq_util_mapto_type(status_type_map, str);
return lwqq_status_to_key(str);
}

typedef struct LwqqClient_
Expand Down
67 changes: 53 additions & 14 deletions lib/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,52 @@ typedef struct LwqqConfirmTable {
char* input; //< write
LwqqCommand cmd;
}LwqqConfirmTable;
void lwqq_ct_free(LwqqConfirmTable* table);

typedef struct LwqqTypeMap{
int type;
const char* str;
}LwqqTypeMap;

void lwqq_ct_free(LwqqConfirmTable* table);

int lwqq_util_mapto_type(const struct LwqqTypeMap* maps,const char* key);
const char* lwqq_util_mapto_str(const struct LwqqTypeMap* maps,int type);

#define PAIR_BEGIN_LONG(name, key_ty, val_ty) \
struct LwqqPair##name { \
key_ty key; \
val_ty val; \
}; \
static struct LwqqPair##name lwqq_pair_##name[] = {

#define PAIR(key, val) {key, val},

#define PAIR_END(name, key_ty, val_ty, key_def, val_def) \
} \
; \
val_ty name##_to_val(key_ty key) \
{ \
struct LwqqPair##name* maps_end = lwqq_pair_##name \
+ sizeof(lwqq_pair_##name) \
/ sizeof(struct LwqqPair##name), \
*maps = lwqq_pair_##name; \
for (; maps < maps_end; maps++) { \
if (key_eq(maps->key, key)) \
return maps->val; \
} \
return val_def; \
} \
key_ty name##_to_key(val_ty val) \
{ \
struct LwqqPair##name* maps_end = lwqq_pair_##name \
+ sizeof(lwqq_pair_##name) \
/ sizeof(struct LwqqPair##name), \
*maps = lwqq_pair_##name; \
for (; maps < maps_end; maps++) { \
if (val_eq(maps->val, val)) \
return maps->key; \
} \
return key_def; \
}

LwqqErrorCode lwqq_util_save_img(void* ptr,size_t len,const char* path,const char* dir);

char* lwqq_util_hashN(const char* uin,const char* ptwebqq,void*);
Expand Down Expand Up @@ -57,19 +92,23 @@ char* lwqq_util_load_res(const char* resource, int security);
#define LWQQ_PATH_SEP "/"
#endif

#define TABLE_BEGIN_LONG(name,rettp,paratp,init) \
rettp name(paratp k){\
rettp ret_ = init;\
switch(k){
#define TABLE_BEGIN_LONG(name, rettp, paratp, init) \
rettp name(paratp k) \
{ \
rettp ret_ = init; \
switch (k) {

#define TABLE_BEGIN(name, type, init) TABLE_BEGIN_LONG(name, type, long, init)

#define TABLE_BEGIN(name,type,init) TABLE_BEGIN_LONG(name,type,long,init)
#define TR(k, v) \
case k: \
ret_ = v; \
break;

#define TR(k,v)\
case k:ret_ = v;break;
#define TABLE_END()\
}\
return ret_;\
}
#define TABLE_END() \
} \
return ret_; \
}

/* dynamic string manipulation nano-library */
#ifndef ds_init
Expand Down

0 comments on commit eb91b5b

Please sign in to comment.