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);
434 return (
L_HASHMAP *)ERROR_PTR(
"sa not defined", __func__, NULL);
436 n = sarrayGetCount(sa);
437 if ((hmap = l_hmapCreate(0.51 * n, 2)) == NULL)
438 return (
L_HASHMAP *)ERROR_PTR(
"hmap not made", __func__, NULL);
439 for (i = 0; i < n; i++) {
440 str = sarrayGetString(sa, i,
L_NOCOPY);
441 l_hashStringToUint64Fast(str, &key);
442 l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
467 if (phmap) *phmap = NULL;
469 return ERROR_INT(
"&sad not defined", __func__, 1);
472 return ERROR_INT(
"sas not defined", __func__, 1);
476 return ERROR_INT(
"hmap not made", __func__, 1);
477 sad = sarrayCreate(0);
480 for (i = 0; i < tabsize; i++) {
483 str = sarrayGetString(sas, hitem->
val,
L_COPY);
484 sarrayAddString(sad, str,
L_INSERT);
492 l_hmapDestroy(&hmap);
513 return ERROR_INT(
"&sad not defined", __func__, 1);
516 return ERROR_INT(
"sa1 not defined", __func__, 1);
518 return ERROR_INT(
"sa2 not defined", __func__, 1);
520 sa3 = sarrayCopy(sa1);
521 if (sarrayJoin(sa3, sa2) == 1) {
523 return ERROR_INT(
"sa3 join failed", __func__, 1);
547SARRAY *sa_small, *sa_big, *sa3, *sad;
552 return ERROR_INT(
"&sad not defined", __func__, 1);
555 return ERROR_INT(
"sa1 not defined", __func__, 1);
557 return ERROR_INT(
"sa2 not defined", __func__, 1);
560 n1 = sarrayGetCount(sa1);
561 n2 = sarrayGetCount(sa2);
562 sa_small = (n1 < n2) ? sa1 : sa2;
563 sa_big = (n1 < n2) ? sa2 : sa1;
565 return ERROR_INT(
"hmap not made", __func__, 1);
576 sad = sarrayCreate(0);
578 n = sarrayGetCount(sa3);
579 for (i = 0; i < n; i++) {
580 str = sarrayGetString(sa3, i,
L_NOCOPY);
581 l_hashStringToUint64Fast(str, &key);
582 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
584 sarrayAddString(sad, str,
L_COPY);
586 l_hmapDestroy(&hmap);
608 if ((sa = sarrayCreate(n)) == NULL)
609 return (
SARRAY *)ERROR_PTR(
"sa not made", __func__, NULL);
610 for (i = 0; i < n; i++) {
611 snprintf(buf,
sizeof(buf),
"%d", i);
612 sarrayAddString(sa, buf,
L_COPY);
642 const char *keystring,
645char *key, *val, *str;
650 return ERROR_INT(
"&valstring not defined", __func__, 1);
653 return ERROR_INT(
"sa not defined", __func__, 1);
655 return ERROR_INT(
"keystring not defined", __func__, 1);
657 n = sarrayGetCount(sa);
658 for (i = 0; i < n; i++) {
659 str = sarrayGetString(sa, i,
L_NOCOPY);
660 sa1 = sarrayCreate(2);
661 sarraySplitString(sa1, str,
",");
662 if (sarrayGetCount(sa1) != 2) {
666 key = sarrayGetString(sa1, 0,
L_NOCOPY);
667 val = sarrayGetString(sa1, 1,
L_NOCOPY);
668 if (!strcmp(key, keystring)) {
669 *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