72#include <config_auto.h>
76#include "allheaders.h"
107 return (
SARRAY *)ERROR_PTR(
"sain not defined", __func__, NULL);
111 saout = sarrayCopy(sain);
112 else if (sain != saout)
113 return (
SARRAY *)ERROR_PTR(
"invalid: not in-place", __func__, NULL);
114 array = saout->
array;
115 n = sarrayGetCount(saout);
118 for (gap = n/2; gap > 0; gap = gap / 2) {
119 for (i = gap; i < n; i++) {
120 for (j = i - gap; j >= 0; j -= gap) {
127 array[j] = array[j + gap];
128 array[j + gap] = tmp;
154 return (
SARRAY *)ERROR_PTR(
"sain not defined", __func__, NULL);
156 return (
SARRAY *)ERROR_PTR(
"naindex not defined", __func__, NULL);
158 n = sarrayGetCount(sain);
159 saout = sarrayCreate(n);
160 for (i = 0; i < n; i++) {
161 numaGetIValue(naindex, i, &index);
162 str = sarrayGetString(sain, index,
L_COPY);
163 sarrayAddString(saout, str,
L_INSERT);
187l_int32 i, len1, len2, len;
190 return ERROR_INT(
"str1 not defined", __func__, 1);
192 return ERROR_INT(
"str2 not defined", __func__, 1);
196 len = L_MIN(len1, len2);
198 for (i = 0; i < len; i++) {
199 if (str1[i] == str2[i])
201 if (str1[i] > str2[i])
233 return (L_ASET *)ERROR_PTR(
"sa not defined", __func__, NULL);
235 set = l_asetCreate(L_UINT_TYPE);
236 n = sarrayGetCount(sa);
237 for (i = 0; i < n; i++) {
238 str = sarrayGetString(sa, i,
L_NOCOPY);
239 l_hashStringToUint64Fast(str, &hash);
241 l_asetInsert(set, key);
277 return ERROR_INT(
"&sad not defined", __func__, 1);
280 return ERROR_INT(
"sas not defined", __func__, 1);
282 set = l_asetCreate(L_UINT_TYPE);
283 sad = sarrayCreate(0);
285 n = sarrayGetCount(sas);
286 for (i = 0; i < n; i++) {
287 str = sarrayGetString(sas, i,
L_NOCOPY);
288 l_hashStringToUint64Fast(str, &hash);
290 if (!l_asetFind(set, key)) {
291 sarrayAddString(sad, str,
L_COPY);
292 l_asetInsert(set, key);
327 return ERROR_INT(
"&sad not defined", __func__, 1);
330 return ERROR_INT(
"sa1 not defined", __func__, 1);
332 return ERROR_INT(
"sa2 not defined", __func__, 1);
335 sa3 = sarrayCopy(sa1);
336 if (sarrayJoin(sa3, sa2) == 1) {
338 return ERROR_INT(
"join failed for sa3", __func__, 1);
378SARRAY *sa_small, *sa_big, *sad;
381 return ERROR_INT(
"&sad not defined", __func__, 1);
384 return ERROR_INT(
"sa1 not defined", __func__, 1);
386 return ERROR_INT(
"sa2 not defined", __func__, 1);
389 n1 = sarrayGetCount(sa1);
390 n2 = sarrayGetCount(sa2);
391 sa_small = (n1 < n2) ? sa1 : sa2;
392 sa_big = (n1 < n2) ? sa2 : sa1;
396 sad = sarrayCreate(0);
398 n = sarrayGetCount(sa_small);
399 set2 = l_asetCreate(L_UINT_TYPE);
400 for (i = 0; i < n; i++) {
401 str = sarrayGetString(sa_small, i,
L_NOCOPY);
402 l_hashStringToUint64Fast(str, &hash);
404 if (l_asetFind(set1, key) && !l_asetFind(set2, key)) {
405 sarrayAddString(sad, str,
L_COPY);
406 l_asetInsert(set2, key);
410 l_asetDestroy(&set1);
411 l_asetDestroy(&set2);
435 return (L_HASHMAP *)ERROR_PTR(
"sa not defined", __func__, NULL);
437 n = sarrayGetCount(sa);
438 if ((hmap = l_hmapCreate(0.51 * n, 2)) == NULL)
439 return (L_HASHMAP *)ERROR_PTR(
"hmap not made", __func__, NULL);
440 for (i = 0; i < n; i++) {
441 str = sarrayGetString(sa, i,
L_NOCOPY);
442 l_hashStringToUint64Fast(str, &key);
443 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
468 if (phmap) *phmap = NULL;
470 return ERROR_INT(
"&sad not defined", __func__, 1);
473 return ERROR_INT(
"sas not defined", __func__, 1);
477 return ERROR_INT(
"hmap not made", __func__, 1);
478 sad = sarrayCreate(0);
481 for (i = 0; i < tabsize; i++) {
484 str = sarrayGetString(sas, hitem->
val,
L_COPY);
485 sarrayAddString(sad, str,
L_INSERT);
493 l_hmapDestroy(&hmap);
514 return ERROR_INT(
"&sad not defined", __func__, 1);
517 return ERROR_INT(
"sa1 not defined", __func__, 1);
519 return ERROR_INT(
"sa2 not defined", __func__, 1);
521 sa3 = sarrayCopy(sa1);
522 if (sarrayJoin(sa3, sa2) == 1) {
524 return ERROR_INT(
"sa3 join failed", __func__, 1);
548SARRAY *sa_small, *sa_big, *sa3, *sad;
553 return ERROR_INT(
"&sad not defined", __func__, 1);
556 return ERROR_INT(
"sa1 not defined", __func__, 1);
558 return ERROR_INT(
"sa2 not defined", __func__, 1);
561 n1 = sarrayGetCount(sa1);
562 n2 = sarrayGetCount(sa2);
563 sa_small = (n1 < n2) ? sa1 : sa2;
564 sa_big = (n1 < n2) ? sa2 : sa1;
566 return ERROR_INT(
"hmap not made", __func__, 1);
577 sad = sarrayCreate(0);
579 n = sarrayGetCount(sa3);
580 for (i = 0; i < n; i++) {
581 str = sarrayGetString(sa3, i,
L_NOCOPY);
582 l_hashStringToUint64Fast(str, &key);
583 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
585 sarrayAddString(sad, str,
L_COPY);
587 l_hmapDestroy(&hmap);
609 if ((sa = sarrayCreate(n)) == NULL)
610 return (
SARRAY *)ERROR_PTR(
"sa not made", __func__, NULL);
611 for (i = 0; i < n; i++) {
612 snprintf(buf,
sizeof(buf),
"%d", i);
613 sarrayAddString(sa, buf,
L_COPY);
643 const char *keystring,
646char *key, *val, *str;
651 return ERROR_INT(
"&valstring not defined", __func__, 1);
654 return ERROR_INT(
"sa not defined", __func__, 1);
656 return ERROR_INT(
"keystring not defined", __func__, 1);
658 n = sarrayGetCount(sa);
659 for (i = 0; i < n; i++) {
660 str = sarrayGetString(sa, i,
L_NOCOPY);
661 sa1 = sarrayCreate(2);
662 sarraySplitString(sa1, str,
",");
663 if (sarrayGetCount(sa1) != 2) {
667 key = sarrayGetString(sa1, 0,
L_NOCOPY);
668 val = sarrayGetString(sa1, 1,
L_NOCOPY);
669 if (!strcmp(key, keystring)) {
670 *pvalstring = stringNew(val);
L_HASHMAP * l_hmapCreateFromSarray(SARRAY *sa)
l_hmapCreateFromSarray()
l_ok sarrayRemoveDupsByAset(SARRAY *sas, SARRAY **psad)
sarrayRemoveDupsByAset()
l_ok sarrayIntersectionByHmap(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayIntersectionByHmap()
SARRAY * sarraySortByIndex(SARRAY *sain, NUMA *naindex)
sarraySortByIndex()
l_ok sarrayUnionByAset(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayUnionByAset()
l_int32 stringCompareLexical(const char *str1, const char *str2)
stringCompareLexical()
l_ok sarrayLookupCSKV(SARRAY *sa, const char *keystring, char **pvalstring)
sarrayLookupCSKV()
SARRAY * sarrayGenerateIntegers(l_int32 n)
sarrayGenerateIntegers()
l_ok sarrayUnionByHmap(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayUnionByHmap()
l_ok sarrayIntersectionByAset(SARRAY *sa1, SARRAY *sa2, SARRAY **psad)
sarrayIntersectionByAset()
L_ASET * l_asetCreateFromSarray(SARRAY *sa)
l_asetCreateFromSarray()
l_ok sarrayRemoveDupsByHmap(SARRAY *sas, SARRAY **psad, L_HASHMAP **phmap)
sarrayRemoveDupsByHmap()
SARRAY * sarraySort(SARRAY *saout, SARRAY *sain, l_int32 sortorder)
sarraySort()
struct L_Hashitem ** hashtab