1 #ifndef DYNAMITEsinglenumberspaceHEADERFILE 2 #define DYNAMITEsinglenumberspaceHEADERFILE 3 #ifdef _cplusplus 4 extern "C" { 5 #endif 6 #include "shadowseq.h" 7 8 #define SingleNumberSpaceLISTLENGTH 1024 9 10 struct Wise2_SingleNumberSequence { 11 int dynamite_hard_link; 12 #ifdef PTHREAD 13 pthread_mutex_t dynamite_mutex; 14 #endif 15 int start; 16 int end; 17 ShadowSequence * seq; 18 } ; 19 /* SingleNumberSequence defined */ 20 #ifndef DYNAMITE_DEFINED_SingleNumberSequence 21 typedef struct Wise2_SingleNumberSequence Wise2_SingleNumberSequence; 22 #define SingleNumberSequence Wise2_SingleNumberSequence 23 #define DYNAMITE_DEFINED_SingleNumberSequence 24 #endif 25 26 27 struct Wise2_SingleNumberSpace { 28 int dynamite_hard_link; 29 #ifdef PTHREAD 30 pthread_mutex_t dynamite_mutex; 31 #endif 32 int current_end; 33 SingleNumberSequence ** sns; 34 int len;/* len for above sns */ 35 int maxlen; /* maxlen for above sns */ 36 SingleNumberSequence * last_accessed; 37 int average_len; 38 int is_static; 39 int max_length; 40 } ; 41 /* SingleNumberSpace defined */ 42 #ifndef DYNAMITE_DEFINED_SingleNumberSpace 43 typedef struct Wise2_SingleNumberSpace Wise2_SingleNumberSpace; 44 #define SingleNumberSpace Wise2_SingleNumberSpace 45 #define DYNAMITE_DEFINED_SingleNumberSpace 46 #endif 47 48 49 50 51 /***************************************************/ 52 /* Callable functions */ 53 /* These are the functions you are expected to use */ 54 /***************************************************/ 55 56 57 58 /* Function: lookup_ShadowSequence_SingleNumberSpace(space,pos) 59 * 60 * Descrip: New return using binary choping 61 * 62 * 63 * Arg: space [UNKN ] Undocumented argument [SingleNumberSpace *] 64 * Arg: pos [UNKN ] Undocumented argument [int] 65 * 66 * Return [UNKN ] Undocumented return value [SingleNumberSequence *] 67 * 68 */ 69 SingleNumberSequence * Wise2_lookup_ShadowSequence_SingleNumberSpace(SingleNumberSpace * space,int pos); 70 #define lookup_ShadowSequence_SingleNumberSpace Wise2_lookup_ShadowSequence_SingleNumberSpace 71 72 73 /* Function: find_position_SingleNumberSpace(space,lower,higher,position) 74 * 75 * Descrip: Recursive function for finding position 76 * 77 * 78 * Arg: space [UNKN ] Undocumented argument [SingleNumberSpace *] 79 * Arg: lower [UNKN ] Undocumented argument [int] 80 * Arg: higher [UNKN ] Undocumented argument [int] 81 * Arg: position [UNKN ] Undocumented argument [int] 82 * 83 * Return [UNKN ] Undocumented return value [int] 84 * 85 */ 86 int Wise2_find_position_SingleNumberSpace(SingleNumberSpace * space,int lower,int higher,int position); 87 #define find_position_SingleNumberSpace Wise2_find_position_SingleNumberSpace 88 89 90 /* Function: add_ShadowSequence_SingleNumberSpace(space,seq) 91 * 92 * Descrip: Adds a sequence to a single number space, giving out the start 93 * position for this sequence 94 * 95 * 96 * Arg: space [UNKN ] Undocumented argument [SingleNumberSpace *] 97 * Arg: seq [UNKN ] Undocumented argument [ShadowSequence *] 98 * 99 * Return [UNKN ] Undocumented return value [int] 100 * 101 */ 102 int Wise2_add_ShadowSequence_SingleNumberSpace(SingleNumberSpace * space,ShadowSequence * seq); 103 #define add_ShadowSequence_SingleNumberSpace Wise2_add_ShadowSequence_SingleNumberSpace 104 105 106 /* Function: new_SingleNumberSpace(has_maxlen,max_length) 107 * 108 * Descrip: Provides a new single number space 109 * 110 * 111 * Arg: has_maxlen [UNKN ] Undocumented argument [int] 112 * Arg: max_length [UNKN ] Undocumented argument [int] 113 * 114 * Return [UNKN ] Undocumented return value [SingleNumberSpace *] 115 * 116 */ 117 SingleNumberSpace * Wise2_new_SingleNumberSpace(int has_maxlen,int max_length); 118 #define new_SingleNumberSpace Wise2_new_SingleNumberSpace 119 120 121 /* Function: hard_link_SingleNumberSequence(obj) 122 * 123 * Descrip: Bumps up the reference count of the object 124 * Meaning that multiple pointers can 'own' it 125 * 126 * 127 * Arg: obj [UNKN ] Object to be hard linked [SingleNumberSequence *] 128 * 129 * Return [UNKN ] Undocumented return value [SingleNumberSequence *] 130 * 131 */ 132 SingleNumberSequence * Wise2_hard_link_SingleNumberSequence(SingleNumberSequence * obj); 133 #define hard_link_SingleNumberSequence Wise2_hard_link_SingleNumberSequence 134 135 136 /* Function: SingleNumberSequence_alloc(void) 137 * 138 * Descrip: Allocates structure: assigns defaults if given 139 * 140 * 141 * 142 * Return [UNKN ] Undocumented return value [SingleNumberSequence *] 143 * 144 */ 145 SingleNumberSequence * Wise2_SingleNumberSequence_alloc(void); 146 #define SingleNumberSequence_alloc Wise2_SingleNumberSequence_alloc 147 148 149 /* Function: free_SingleNumberSequence(obj) 150 * 151 * Descrip: Free Function: removes the memory held by obj 152 * Will chain up to owned members and clear all lists 153 * 154 * 155 * Arg: obj [UNKN ] Object that is free'd [SingleNumberSequence *] 156 * 157 * Return [UNKN ] Undocumented return value [SingleNumberSequence *] 158 * 159 */ 160 SingleNumberSequence * Wise2_free_SingleNumberSequence(SingleNumberSequence * obj); 161 #define free_SingleNumberSequence Wise2_free_SingleNumberSequence 162 163 164 /* Function: add_SingleNumberSpace(obj,add) 165 * 166 * Descrip: Adds another object to the list. It will expand the list if necessary 167 * 168 * 169 * Arg: obj [UNKN ] Object which contains the list [SingleNumberSpace *] 170 * Arg: add [OWNER] Object to add to the list [SingleNumberSequence *] 171 * 172 * Return [UNKN ] Undocumented return value [boolean] 173 * 174 */ 175 boolean Wise2_add_SingleNumberSpace(SingleNumberSpace * obj,SingleNumberSequence * add); 176 #define add_SingleNumberSpace Wise2_add_SingleNumberSpace 177 178 179 /* Function: flush_SingleNumberSpace(obj) 180 * 181 * Descrip: Frees the list elements, sets length to 0 182 * If you want to save some elements, use hard_link_xxx 183 * to protect them from being actually destroyed in the free 184 * 185 * 186 * Arg: obj [UNKN ] Object which contains the list [SingleNumberSpace *] 187 * 188 * Return [UNKN ] Undocumented return value [int] 189 * 190 */ 191 int Wise2_flush_SingleNumberSpace(SingleNumberSpace * obj); 192 #define flush_SingleNumberSpace Wise2_flush_SingleNumberSpace 193 194 195 /* Function: SingleNumberSpace_alloc_std(void) 196 * 197 * Descrip: Equivalent to SingleNumberSpace_alloc_len(SingleNumberSpaceLISTLENGTH) 198 * 199 * 200 * 201 * Return [UNKN ] Undocumented return value [SingleNumberSpace *] 202 * 203 */ 204 SingleNumberSpace * Wise2_SingleNumberSpace_alloc_std(void); 205 #define SingleNumberSpace_alloc_std Wise2_SingleNumberSpace_alloc_std 206 207 208 /* Function: SingleNumberSpace_alloc_len(len) 209 * 210 * Descrip: Allocates len length to all lists 211 * 212 * 213 * Arg: len [UNKN ] Length of lists to allocate [int] 214 * 215 * Return [UNKN ] Undocumented return value [SingleNumberSpace *] 216 * 217 */ 218 SingleNumberSpace * Wise2_SingleNumberSpace_alloc_len(int len); 219 #define SingleNumberSpace_alloc_len Wise2_SingleNumberSpace_alloc_len 220 221 222 /* Function: hard_link_SingleNumberSpace(obj) 223 * 224 * Descrip: Bumps up the reference count of the object 225 * Meaning that multiple pointers can 'own' it 226 * 227 * 228 * Arg: obj [UNKN ] Object to be hard linked [SingleNumberSpace *] 229 * 230 * Return [UNKN ] Undocumented return value [SingleNumberSpace *] 231 * 232 */ 233 SingleNumberSpace * Wise2_hard_link_SingleNumberSpace(SingleNumberSpace * obj); 234 #define hard_link_SingleNumberSpace Wise2_hard_link_SingleNumberSpace 235 236 237 /* Function: SingleNumberSpace_alloc(void) 238 * 239 * Descrip: Allocates structure: assigns defaults if given 240 * 241 * 242 * 243 * Return [UNKN ] Undocumented return value [SingleNumberSpace *] 244 * 245 */ 246 SingleNumberSpace * Wise2_SingleNumberSpace_alloc(void); 247 #define SingleNumberSpace_alloc Wise2_SingleNumberSpace_alloc 248 249 250 /* Function: free_SingleNumberSpace(obj) 251 * 252 * Descrip: Free Function: removes the memory held by obj 253 * Will chain up to owned members and clear all lists 254 * 255 * 256 * Arg: obj [UNKN ] Object that is free'd [SingleNumberSpace *] 257 * 258 * Return [UNKN ] Undocumented return value [SingleNumberSpace *] 259 * 260 */ 261 SingleNumberSpace * Wise2_free_SingleNumberSpace(SingleNumberSpace * obj); 262 #define free_SingleNumberSpace Wise2_free_SingleNumberSpace 263 264 265 /* Unplaced functions */ 266 /* There has been no indication of the use of these functions */ 267 268 269 /***************************************************/ 270 /* Internal functions */ 271 /* you are not expected to have to call these */ 272 /***************************************************/ 273 void Wise2_swap_SingleNumberSpace(SingleNumberSequence ** list,int i,int j) ; 274 #define swap_SingleNumberSpace Wise2_swap_SingleNumberSpace 275 void Wise2_qsort_SingleNumberSpace(SingleNumberSequence ** list,int left,int right,int (*comp)(SingleNumberSequence * ,SingleNumberSequence * )); 276 #define qsort_SingleNumberSpace Wise2_qsort_SingleNumberSpace 277 void Wise2_sort_SingleNumberSpace(SingleNumberSpace * obj,int (*comp)(SingleNumberSequence *, SingleNumberSequence *)); 278 #define sort_SingleNumberSpace Wise2_sort_SingleNumberSpace 279 boolean Wise2_expand_SingleNumberSpace(SingleNumberSpace * obj,int len); 280 #define expand_SingleNumberSpace Wise2_expand_SingleNumberSpace 281 282 #ifdef _cplusplus 283 } 284 #endif 285 286 #endif 287