1#ifndef _WDL_ASSOCARRAY_H_
2#define _WDL_ASSOCARRAY_H_
20 explicit WDL_AssocArrayImpl(
int (*keycmp)(KEY *k1, KEY *k2), KEY (*keydup)(KEY)=0,
void (*keydispose)(KEY)=0,
void (*valdispose)(VAL)=0)
40 if (keyPtrOut) *keyPtrOut = kv->
key;
66 memmove(kv+1, kv, (
m_data.GetSize()-
i-1)*(
unsigned int)
sizeof(
KeyVal));
89 if (idx >= 0 && idx <
m_data.GetSize())
110 m_data.Resize(0, resizedown);
149 if (idx >= 0 && idx <
m_data.GetSize())
179 if (new_keycmp)
m_keycmp = new_keycmp;
183 (
int(*)(
const void*,
const void*))
m_keycmp);
197 (
int(*)(
const void*,
const void*))
m_keycmp, tmp);
203 (
int(*)(
const void*,
const void*))
m_keycmp);
219 if (cmp > 0)
a =
b+1;
220 else if (cmp < 0)
c =
b;
235 if (ismatch)
return i;
294 const int sz =
m_data.GetSize();
298 for (
int x = 1;
x < sz;
x ++)
302 if (rd != wr) *wr=*rd;
313 if (cnt < sz)
m_data.Resize(cnt,
false);
323 explicit WDL_AssocArray(
int (*keycmp)(KEY *k1, KEY *k2), KEY (*keydup)(KEY)=0,
void (*keydispose)(KEY)=0,
void (*valdispose)(VAL)=0)
360 static int cmpint(
int *i1,
int *i2) {
return *i1-*i2; }
372 static int cmpint(
int *i1,
int *i2) {
return *i1-*i2; }
383 static const char *
dupstr(
const char *
s) {
return strdup(
s); }
384 static int cmpstr(
const char **s1,
const char **s2) {
return strcmp(*s1, *s2); }
399 static const char *
dupstr(
const char *
s) {
return strdup(
s); }
400 static int cmpstr(
const char **s1,
const char **s2) {
return strcmp(*s1, *s2); }
423 static int _cmpstr(
const char *s1,
const char *s2,
bool case_sensitive)
429 if (*s1 >=
'0' && *s1 <=
'9' && *s2 >=
'0' && *s2 <=
'9')
431 int lzdiff=0, len1=0, len2=0;
433 while (*s1 ==
'0') { s1++; lzdiff--; }
434 while (*s2 ==
'0') { s2++; lzdiff++; }
436 while (s1[len1] >=
'0' && s1[len1] <=
'9') len1++;
437 while (s2[len2] >=
'0' && s2[len2] <=
'9') len2++;
439 if (len1 != len2)
return len1-len2;
443 const int d = *s1++ - *s2++;
447 if (lzdiff)
return lzdiff;
451 char c1 = *s1++,
c2 = *s2++;
454 if (case_sensitive)
return c1-
c2;
456 if (c1>=
'a' && c1<=
'z') c1+=
'A'-
'a';
457 if (
c2>=
'a' &&
c2<=
'z')
c2+=
'A'-
'a';
458 if (c1 !=
c2)
return c1-
c2;
460 else if (!c1)
return 0;
uint8_t a
Definition Spc_Cpu.h:141
VAL Enumerate(int i, KEY *key=0, VAL notfound=0) const
Definition assocarray.h:335
VAL Get(KEY key, VAL notfound=0) const
Definition assocarray.h:328
WDL_AssocArray(int(*keycmp)(KEY *k1, KEY *k2), KEY(*keydup)(KEY)=0, void(*keydispose)(KEY)=0, void(*valdispose)(VAL)=0)
Definition assocarray.h:323
KEY ReverseLookup(VAL val, KEY notfound=0) const
Definition assocarray.h:342
~WDL_AssocArrayImpl()
Definition assocarray.h:28
KEY * ReverseLookupPtr(VAL val) const
Definition assocarray.h:129
void(* m_valdispose)(VAL)
Definition assocarray.h:288
void AddUnsorted(KEY key, VAL val)
Definition assocarray.h:168
void CopyContents(const WDL_AssocArrayImpl &cp)
Definition assocarray.h:244
int(* m_keycmp)(KEY *k1, KEY *k2)
Definition assocarray.h:285
void ChangeKeyByIndex(int idx, KEY newkey, bool needsort)
Definition assocarray.h:147
WDL_AssocArrayImpl(int(*keycmp)(KEY *k1, KEY *k2), KEY(*keydup)(KEY)=0, void(*keydispose)(KEY)=0, void(*valdispose)(VAL)=0)
Definition assocarray.h:20
int GetSize() const
Definition assocarray.h:113
VAL * GetPtr(KEY key, KEY *keyPtrOut=NULL) const
Definition assocarray.h:33
void ChangeKey(KEY oldkey, KEY newkey)
Definition assocarray.h:140
int GetIdx(KEY key) const
Definition assocarray.h:231
WDL_AssocArrayImpl(const WDL_AssocArrayImpl &cp)
Definition assocarray.h:14
void DeleteByIndex(int idx)
Definition assocarray.h:87
KEY(* m_keydup)(KEY)
Definition assocarray.h:286
void Resort(int(*new_keycmp)(KEY *k1, KEY *k2)=NULL)
Definition assocarray.h:177
WDL_TypedBuf< KeyVal > m_data
Definition assocarray.h:281
void(* m_keydispose)(KEY)
Definition assocarray.h:287
WDL_AssocArrayImpl & operator=(const WDL_AssocArrayImpl &cp)
Definition assocarray.h:16
void CopyContentsAsReference(const WDL_AssocArrayImpl &cp)
Definition assocarray.h:263
int LowerBound(KEY key, bool *ismatch) const
Definition assocarray.h:210
void ResortStable()
Definition assocarray.h:189
void RemoveDuplicateKeys()
Definition assocarray.h:292
bool Exists(KEY key) const
Definition assocarray.h:46
void DeleteAll(bool resizedown=false)
Definition assocarray.h:98
void Delete(KEY key)
Definition assocarray.h:74
int Insert(KEY key, VAL val)
Definition assocarray.h:53
VAL * EnumeratePtr(int i, KEY *key=0) const
Definition assocarray.h:118
void SetGranul(int gran)
Definition assocarray.h:239
static int cmpint(int *i1, int *i2)
Definition assocarray.h:372
WDL_IntKeyedArray2(void(*valdispose)(VAL)=0)
Definition assocarray.h:367
~WDL_IntKeyedArray2()
Definition assocarray.h:368
static int cmpint(int *i1, int *i2)
Definition assocarray.h:360
~WDL_IntKeyedArray()
Definition assocarray.h:356
WDL_IntKeyedArray(void(*valdispose)(VAL)=0)
Definition assocarray.h:355
static int _cmpstr(const char *s1, const char *s2, bool case_sensitive)
Definition assocarray.h:423
WDL_LogicalSortStringKeyedArray(bool caseSensitive=true, void(*valdispose)(VAL)=0)
Definition assocarray.h:411
static int cmpistr(const char **a, const char **b)
Definition assocarray.h:419
static int cmpstr(const char **a, const char **b)
Definition assocarray.h:418
~WDL_LogicalSortStringKeyedArray()
Definition assocarray.h:416
static int cmpptr(INT_PTR *a, INT_PTR *b)
Definition assocarray.h:477
WDL_PtrKeyedArray(void(*valdispose)(VAL)=0)
Definition assocarray.h:471
~WDL_PtrKeyedArray()
Definition assocarray.h:473
static int cmpstr(const char **s1, const char **s2)
Definition assocarray.h:400
static int cmpistr(const char **a, const char **b)
Definition assocarray.h:401
static const char * dupstr(const char *s)
Definition assocarray.h:399
~WDL_StringKeyedArray2()
Definition assocarray.h:397
WDL_StringKeyedArray2(bool caseSensitive=true, void(*valdispose)(VAL)=0)
Definition assocarray.h:395
static void freestr(const char *s)
Definition assocarray.h:402
static void freecharptr(char *p)
Definition assocarray.h:403
static void freecharptr(char *p)
Definition assocarray.h:387
~WDL_StringKeyedArray()
Definition assocarray.h:381
WDL_StringKeyedArray(bool caseSensitive=true, void(*valdispose)(VAL)=0)
Definition assocarray.h:379
static int cmpistr(const char **a, const char **b)
Definition assocarray.h:385
static int cmpstr(const char **s1, const char **s2)
Definition assocarray.h:384
static void freestr(const char *s)
Definition assocarray.h:386
static const char * dupstr(const char *s)
Definition assocarray.h:383
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned s
Definition inflate.c:1555
unsigned x[BMAX+1]
Definition inflate.c:1586
static void c2(register WDL_FFT_COMPLEX *a)
Definition fft.c:270
int val
Definition jpeglib.h:956
static void WDL_STATICFUNC_UNUSED WDL_mergesort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *), char *tmpspace)
Definition mergesort.h:6
Definition assocarray.h:277
KEY key
Definition assocarray.h:278
VAL val
Definition assocarray.h:279
#define stricmp(x, y)
Definition swell-types.h:68
intptr_t INT_PTR
Definition swell-types.h:42
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
ZCONST char * key
Definition crypt.c:587
char * cp
Definition unix.c:513
typedef int(UZ_EXP MsgFn)()
#define void
Definition unzip.h:396
#define WDL_NORMALLY(x)
Definition wdltypes.h:165
#define const
Definition zconf.h:137