#ifndef __UNIC_DICO_H__ #define __UNIC_DICO_H__ #ifndef __DEFINE_NUMS__ #define __DEFINE_NUMS__ #define f32 float #define u32 unsigned int #define s32 int #define u16 unsigned short #define s16 signed short #define u8 unsigned char #define s8 char #endif #define UnicID unsigned int #define InvalidID 0xffffffff #define UNIC_Dico_HValue 4 typedef struct tdst_Dico_Node_ { u32 NextMatch; u32 NextNotMatch[UNIC_Dico_HValue]; char Value; char IsDeleted; u32 AssociatedValue; } tdst_Dico_Node; class UNIC_Dico { public: tdst_Dico_Node *mpst_Dico; u32 IsCaseSensitive; u32 NoSpace; u32 IsInit; UNIC_Dico():mpst_Dico(0) { } void Init(void); void Destroy(void); u32 AddWord(char *); u32 DelWord(char *); u32 IsExist(char *,u32 DeletedOnly = 0); /* Return value (-1 if fail) */ u32 GetWord(char *, u32 ValueToFind); u32 GetUnic(/* OUT */ UnicID *ID,/* IN */ char *Name); u32 GetName(/* IN */ UnicID *ID,/* OUT */ char *Name); void EnumWords(void (*CLBK)(char *String,void *UserParam),void *UserParam,u32 EnumDeleted = 0); void EnumWordsBaseString(void (*CLBK)(char *String,void *UserParam),void *UserParam,char *BaseString,u32 EnumDeleted = 0); private: void (*CLBK)(char *String,void *UserParam); void *UserParam; void REnumWords(u32 CurrentIndex, char *pBaseString, char *pCurrentString, u32 EnumDeleted); u32 FindKey(u32 CurrentIndex,char *string, u32 ValueToFind); u32 u32_GetANode(); u32 mu32_DicoSize; u32 mu32_DicoInc; }; #endif /* !__UNIC_DICO_H__ */