72 #include <config_auto.h> 76 #include "allheaders.h" 103 l_int32 n, i, j, gap;
105 PROCNAME(
"sarraySort");
108 return (
SARRAY *)ERROR_PTR(
"sain not defined", procName, NULL);
113 else if (sain != saout)
114 return (
SARRAY *)ERROR_PTR(
"invalid: not in-place", procName, NULL);
115 array = saout->
array;
119 for (gap = n/2; gap > 0; gap = gap / 2) {
120 for (i = gap; i < n; i++) {
121 for (j = i - gap; j >= 0; j -= gap) {
128 array[j] = array[j + gap];
129 array[j + gap] = tmp;
154 PROCNAME(
"sarraySortByIndex");
157 return (
SARRAY *)ERROR_PTR(
"sain not defined", procName, NULL);
159 return (
SARRAY *)ERROR_PTR(
"naindex not defined", procName, NULL);
163 for (i = 0; i < n; i++) {
190 l_int32 i, len1, len2, len;
192 PROCNAME(
"sarrayCompareLexical");
195 return ERROR_INT(
"str1 not defined", procName, 1);
197 return ERROR_INT(
"str2 not defined", procName, 1);
201 len = L_MIN(len1, len2);
203 for (i = 0; i < len; i++) {
204 if (str1[i] == str2[i])
206 if (str1[i] > str2[i])
237 PROCNAME(
"l_asetCreateFromSarray");
240 return (
L_ASET *)ERROR_PTR(
"sa not defined", procName, NULL);
242 set = l_asetCreate(L_UINT_TYPE);
244 for (i = 0; i < n; i++) {
248 l_asetInsert(set, key);
283 PROCNAME(
"sarrayRemoveDupsByAset");
286 return ERROR_INT(
"&sad not defined", procName, 1);
289 return ERROR_INT(
"sas not defined", procName, 1);
291 set = l_asetCreate(L_UINT_TYPE);
295 for (i = 0; i < n; i++) {
299 if (!l_asetFind(set, key)) {
301 l_asetInsert(set, key);
335 PROCNAME(
"sarrayUnionByAset");
338 return ERROR_INT(
"&sad not defined", procName, 1);
341 return ERROR_INT(
"sa1 not defined", procName, 1);
343 return ERROR_INT(
"sa2 not defined", procName, 1);
349 return ERROR_INT(
"join failed for sa3", procName, 1);
385 l_int32 n1, n2, i, n;
389 SARRAY *sa_small, *sa_big, *sad;
391 PROCNAME(
"sarrayIntersectionByAset");
394 return ERROR_INT(
"&sad not defined", procName, 1);
397 return ERROR_INT(
"sa1 not defined", procName, 1);
399 return ERROR_INT(
"sa2 not defined", procName, 1);
404 sa_small = (n1 < n2) ? sa1 : sa2;
405 sa_big = (n1 < n2) ? sa2 : sa1;
412 set2 = l_asetCreate(L_UINT_TYPE);
413 for (i = 0; i < n; i++) {
417 if (l_asetFind(set1, key) && !l_asetFind(set2, key)) {
419 l_asetInsert(set2, key);
423 l_asetDestroy(&set1);
424 l_asetDestroy(&set2);
447 PROCNAME(
"l_hmapCreateFromSarray");
450 return (
L_HASHMAP *)ERROR_PTR(
"sa not defined", procName, NULL);
453 if ((hmap = l_hmapCreate(0.51 * n, 2)) == NULL)
454 return (
L_HASHMAP *)ERROR_PTR(
"hmap not made", procName, NULL);
455 for (i = 0; i < n; i++) {
458 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
484 PROCNAME(
"sarrayRemoveDupsByHmap");
486 if (phmap) *phmap = NULL;
488 return ERROR_INT(
"&sad not defined", procName, 1);
491 return ERROR_INT(
"sas not defined", procName, 1);
495 return ERROR_INT(
"hmap not made", procName, 1);
499 for (i = 0; i < tabsize; i++) {
511 l_hmapDestroy(&hmap);
531 PROCNAME(
"l_hmapUnionSarray");
534 return ERROR_INT(
"&sad not defined", procName, 1);
537 return ERROR_INT(
"sa1 not defined", procName, 1);
539 return ERROR_INT(
"sa2 not defined", procName, 1);
544 return ERROR_INT(
"sa3 join failed", procName, 1);
565 l_int32 i, n1, n2, n;
568 SARRAY *sa_small, *sa_big, *sa3, *sad;
572 PROCNAME(
"sarrayIntersectionByHmap");
575 return ERROR_INT(
"&sad not defined", procName, 1);
578 return ERROR_INT(
"sa1 not defined", procName, 1);
580 return ERROR_INT(
"sa2 not defined", procName, 1);
585 sa_small = (n1 < n2) ? sa1 : sa2;
586 sa_big = (n1 < n2) ? sa2 : sa1;
588 return ERROR_INT(
"hmap not made", procName, 1);
602 for (i = 0; i < n; i++) {
605 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
609 l_hmapDestroy(&hmap);
631 PROCNAME(
"sarrayGenerateIntegers");
634 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
635 for (i = 0; i < n; i++) {
636 snprintf(buf,
sizeof(buf),
"%d", i);
667 const char *keystring,
670 char *key, *val, *str;
674 PROCNAME(
"sarrayLookupCSKV");
677 return ERROR_INT(
"&valstring not defined", procName, 1);
680 return ERROR_INT(
"sa not defined", procName, 1);
682 return ERROR_INT(
"keystring not defined", procName, 1);
685 for (i = 0; i < n; i++) {
688 sarraySplitString(sa1, str,
",");
695 if (!strcmp(key, keystring)) {
SARRAY * sarrayCopy(SARRAY *sa)
sarrayCopy()
SARRAY * sarrayGenerateIntegers(l_int32 n)
sarrayGenerateIntegers()
char * stringNew(const char *src)
stringNew()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
L_ASET * l_asetCreateFromSarray(SARRAY *sa)
l_asetCreateFromSarray()
l_ok sarrayUnionByAset(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayUnionByAset()
l_ok sarrayIntersectionByAset(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayIntersectionByAset()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
L_HASHMAP * l_hmapCreateFromSarray(SARRAY *sa)
l_hmapCreateFromSarray()
SARRAY * sarraySortByIndex(SARRAY *sain, NUMA *naindex)
sarraySortByIndex()
l_ok sarrayIntersectionByHmap(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayIntersectionByHmap()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
l_ok sarrayUnionByHmap(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayUnionByHmap()
l_int32 stringCompareLexical(const char *str1, const char *str2)
stringCompareLexical()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
struct L_Hashitem ** hashtab
l_ok sarrayRemoveDupsByAset(SARRAY *sas, SARRAY **psad)
sarrayRemoveDupsByAset()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
l_ok sarrayLookupCSKV(SARRAY *sa, const char *keystring, char **pvalstring)
sarrayLookupCSKV()
l_ok sarrayJoin(SARRAY *sa1, SARRAY *sa2)
sarrayJoin()
l_ok l_hashStringToUint64Fast(const char *str, l_uint64 *phash)
l_hashStringToUint64Fast()
SARRAY * sarraySort(SARRAY *saout, SARRAY *sain, l_int32 sortorder)
sarraySort()
l_ok sarrayRemoveDupsByHmap(SARRAY *sas, SARRAY **psad, L_HASHMAP **phmap)
sarrayRemoveDupsByHmap()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()