stringid.h
 1  #ifndef     __STRING_ID_DOUBLE_ARRAY_H_
 2  #define     __STRING_ID_DOUBLE_ARRAY_H_
 3  
 4  
 5  // Functions return these integers.
 6  #define     SI_OK       0       // No error.
 7  #define     SI_EHDL     ( -1 )  // Invalid handle.
 8  #define     SI_EMEM     ( -2 )  // Memory error.
 9  #define     SI_EIO      ( -3 )  // I/O error.
10  #define     SI_EARG     ( -4 )  // Invalid arguments.
11  #define     SI_EFMT     ( -5 )  // Invalid format.
12  #define     SI_EMAX     ( -6 )  // Size limit.
13  #define     SI_EVER     ( -7 )  // Version error.
14  #define     SI_EKEY     ( -8 )  // No such key.
15  
16  
17  #ifdef  __cplusplus
18  extern  "C" {
19  #endif
20  
21  
22  // Handle of key set.
23  typedef     struct SISet    *hSISet;
24  
25  // Handle of dictionary.
26  typedef     struct SIDic    *hSIDic;
27  
28  // Status of dictionary.
29  typedef     struct SIStat
30  {
31      int     nbc;        // Length of BC.
32      int     ntail;      // Length of TAIL.
33      int     size;       // Number of bytes allocated to BC and TAIL.
34      int     nkey;       // Number of keys.
35      int     maxlen;     // Length of the longest key.
36  }   SIStat, *hSIStat;
37  
38  // Agent for search.
39  typedef     struct SISrc
40  {
41      const char  *input;     // Input.
42      const char  *start;     // Start position of key.
43      int         len;        // Length of key.
44      int         idx;        // Index.
45      int         id;         // ID.
46  }   SISrc, *hSISrc;
47  
48  
49  // Create key set.
50  int     SISet_Open( hSISet *h );
51  // Load key set.
52  int     SISet_Load( hSISet h, const char *path, const char *delim );
53  // Insert key.
54  int     SISet_Insert( hSISet h, const char *key );
55  // Destroy key set.
56  int     SISet_Close( hSISet h );
57  
58  // Build dictionary.
59  int     SIDic_Build( hSIDic *h, hSISet set );
60  // Open dictionary.
61  int     SIDic_Open( hSIDic *h, const char *path );
62  // Destroy dictionary.
63  int     SIDic_Close( hSIDic h );
64  // Save dictionary.
65  int     SIDic_Save( hSIDic h, const char *path );
66  
67  // Get dictionary status.
68  int     SIDic_Status( hSIDic h, hSIStat st );
69  
70  // String to ID.
71  const char  *SIDic_StrToID( hSIDic h, const char *s, int *id );
72  // ID to string.
73  const char  *SIDic_IDToStr( hSIDic h, int id );
74  
75  // Start prefix and infix searches.
76  int     SISrc_Start( hSISrc h, const char *s );
77  // Search keys which are prefixes of input.
78  const char  *SIDic_Prefix( hSIDic h, hSISrc src );
79  // Search keys in input.
80  const char  *SIDic_Infix( hSIDic h, hSISrc src );
81  
82  // Error string.
83  const char  *SIDic_Error( int err );
84  
85  
86  #ifdef  __cplusplus
87  }
88  #endif
89  
90  
91  #endif