78#include <config_auto.h>
81#include "allheaders.h"
114 return ERROR_INT(
"dad not defined", __func__, 1);
120 n = l_dnaGetCount(das);
121 if (iend < 0 || iend >= n)
124 return ERROR_INT(
"istart > iend; nothing to add", __func__, 1);
126 for (i = istart; i <= iend; i++) {
127 l_dnaGetDValue(das, i, &val);
128 if (l_dnaAddNumber(dad, val) == 1) {
129 L_ERROR(
"failed to add double at i = %d\n", __func__, i);
159 return (
L_DNA *)ERROR_PTR(
"daa not defined", __func__, NULL);
163 dad = l_dnaCreate(0);
164 for (i = 0; i < nalloc; i++) {
192 return (
L_DNA *)ERROR_PTR(
"das not defined", __func__, NULL);
193 if ((n = l_dnaGetCount(das)) == 0) {
194 L_WARNING(
"das is empty\n", __func__);
195 return l_dnaCopy(das);
197 first = L_MAX(0, first);
198 if (last < 0) last = n - 1;
200 return (
L_DNA *)ERROR_PTR(
"invalid first", __func__, NULL);
202 L_WARNING(
"last = %d is beyond max index = %d; adjusting\n",
203 __func__, last, n - 1);
207 return (
L_DNA *)ERROR_PTR(
"first > last", __func__, NULL);
209 dad = l_dnaCreate(last - first + 1);
210 for (i = first; i <= last; i++) {
211 l_dnaGetDValue(das, i, &dval);
212 l_dnaAddNumber(dad, dval);
235 return (
NUMA *)ERROR_PTR(
"da not defined", __func__, NULL);
237 n = l_dnaGetCount(da);
239 for (i = 0; i < n; i++) {
240 l_dnaGetDValue(da, i, &val);
241 numaAddNumber(na, val);
261 return (
L_DNA *)ERROR_PTR(
"na not defined", __func__, NULL);
263 n = numaGetCount(na);
265 for (i = 0; i < n; i++) {
266 numaGetFValue(na, i, &val);
267 l_dnaAddNumber(da, val);
290l_int32 i, j, w, h, wpl;
291l_uint32 *data, *line;
295 return (
L_DNA *)ERROR_PTR(
"pix not defined", __func__, NULL);
296 if (pixGetDepth(pix) != 32)
297 return (
L_DNA *)ERROR_PTR(
"pix not 32 bpp", __func__, NULL);
299 pixGetDimensions(pix, &w, &h, NULL);
300 data = pixGetData(pix);
301 wpl = pixGetWpl(pix);
302 da = l_dnaCreate(w * h);
303 for (i = 0; i < h; i++) {
304 line = data + i * wpl;
305 for (j = 0; j < w; j++)
306 l_dnaAddNumber(da, (l_float64)line[j]);
330 return (
L_ASET *)ERROR_PTR(
"da not defined", __func__, NULL);
332 set = l_asetCreate(L_FLOAT_TYPE);
333 n = l_dnaGetCount(da);
334 for (i = 0; i < n; i++) {
335 l_dnaGetDValue(da, i, &val);
337 l_asetInsert(set, key);
362 return ERROR_INT(
"&dad not defined", __func__, 1);
365 return ERROR_INT(
"das not defined", __func__, 1);
367 set = l_asetCreate(L_FLOAT_TYPE);
368 dad = l_dnaCreate(0);
370 n = l_dnaGetCount(das);
371 for (i = 0; i < n; i++) {
372 l_dnaGetDValue(das, i, &val);
374 if (!l_asetFind(set, key)) {
375 l_dnaAddNumber(dad, val);
376 l_asetInsert(set, key);
409 return ERROR_INT(
"&dad not defined", __func__, 1);
411 return ERROR_INT(
"da1 not defined", __func__, 1);
413 return ERROR_INT(
"da2 not defined", __func__, 1);
416 da3 = l_dnaCopy(da1);
419 return ERROR_INT(
"join failed for da3", __func__, 1);
454L_DNA *da_small, *da_big, *dad;
457 return ERROR_INT(
"&dad not defined", __func__, 1);
460 return ERROR_INT(
"&da1 not defined", __func__, 1);
462 return ERROR_INT(
"&da2 not defined", __func__, 1);
465 n1 = l_dnaGetCount(da1);
466 n2 = l_dnaGetCount(da2);
467 da_small = (n1 < n2) ? da1 : da2;
468 da_big = (n1 < n2) ? da2 : da1;
472 dad = l_dnaCreate(0);
474 n = l_dnaGetCount(da_small);
475 set2 = l_asetCreate(L_FLOAT_TYPE);
476 for (i = 0; i < n; i++) {
477 l_dnaGetDValue(da_small, i, &val);
479 if (l_asetFind(set1, key) && !l_asetFind(set2, key)) {
480 l_dnaAddNumber(dad, val);
481 l_asetInsert(set2, key);
485 l_asetDestroy(&set1);
486 l_asetDestroy(&set2);
516 return (
L_HASHMAP *)ERROR_PTR(
"da not defined", __func__, NULL);
518 n = l_dnaGetCount(da);
519 hmap = l_hmapCreate(0, 0);
520 for (i = 0; i < n; i++) {
521 l_dnaGetDValue(da, i, &dval);
522 l_hashFloat64ToUint64(dval, &key);
523 l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
554 if (phmap) *phmap = NULL;
556 return ERROR_INT(
"&dad not defined", __func__, 1);
559 return ERROR_INT(
"das not defined", __func__, 1);
563 return ERROR_INT(
"hmap not made", __func__, 1);
564 dad = l_dnaCreate(0);
567 for (i = 0; i < tabsize; i++) {
570 l_dnaGetDValue(das, hitem->
val, &dval);
571 l_dnaAddNumber(dad, dval);
579 l_hmapDestroy(&hmap);
605 return ERROR_INT(
"&dad not defined", __func__, 1);
608 return ERROR_INT(
"da1 not defined", __func__, 1);
610 return ERROR_INT(
"da2 not defined", __func__, 1);
612 da3 = l_dnaCopy(da1);
615 return ERROR_INT(
"da3 join failed", __func__, 1);
645L_DNA *da_small, *da_big, *dad;
650 return ERROR_INT(
"&dad not defined", __func__, 1);
653 return ERROR_INT(
"da1 not defined", __func__, 1);
655 return ERROR_INT(
"da2 not defined", __func__, 1);
658 n1 = l_dnaGetCount(da1);
659 n2 = l_dnaGetCount(da2);
660 da_small = (n1 < n2) ? da1 : da2;
661 da_big = (n1 < n2) ? da2 : da1;
663 return ERROR_INT(
"hmap not made", __func__, 1);
670 dad = l_dnaCreate(0);
672 n = l_dnaGetCount(da_small);
673 for (i = 0; i < n; i++) {
674 l_dnaGetDValue(da_small, i, &dval);
675 l_hashFloat64ToUint64(dval, &key);
676 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
677 if (!hitem || hitem->
count == 0)
679 l_dnaAddNumber(dad, dval);
682 l_hmapDestroy(&hmap);
712 if (pdav) *pdav = NULL;
713 if (pdac) *pdac = NULL;
715 return ERROR_INT(
"das not defined", __func__, 1);
717 return ERROR_INT(
"&dav not defined", __func__, 1);
719 return ERROR_INT(
"&dac not defined", __func__, 1);
723 return ERROR_INT(
"hmap not made", __func__, 1);
724 dav = l_dnaCreate(0);
726 dac = l_dnaCreate(0);
729 for (i = 0; i < tabsize; i++) {
732 l_dnaGetDValue(das, hitem->
val, &dval);
733 l_dnaAddNumber(dav, dval);
734 l_dnaAddNumber(dac, hitem->
count);
739 l_hmapDestroy(&hmap);
757l_int32 i, n, prev, cur;
761 return (
L_DNA *)ERROR_PTR(
"das not defined", __func__, NULL);
762 n = l_dnaGetCount(das);
763 dad = l_dnaCreate(n - 1);
765 for (i = 1; i < n; i++) {
766 l_dnaGetIValue(das, i, &cur);
767 l_dnaAddNumber(dad, cur - prev);
l_ok l_dnaUnionByAset(L_DNA *da1, L_DNA *da2, L_DNA **pdad)
l_dnaUnionByAset()
L_ASET * l_asetCreateFromDna(L_DNA *da)
l_asetCreateFromDna()
l_ok l_dnaUnionByHmap(L_DNA *da1, L_DNA *da2, L_DNA **pdad)
l_dnaUnionByHmap()
L_DNA * l_dnaDiffAdjValues(L_DNA *das)
l_dnaDiffAdjValues()
L_DNA * pixConvertDataToDna(PIX *pix)
pixConvertDataToDna()
l_ok l_dnaJoin(L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend)
l_dnaJoin()
L_DNA * l_dnaaFlattenToDna(L_DNAA *daa)
l_dnaaFlattenToDna()
l_ok l_dnaMakeHistoByHmap(L_DNA *das, L_DNA **pdav, L_DNA **pdac)
l_dnaMakeHistoByHmap()
l_ok l_dnaRemoveDupsByHmap(L_DNA *das, L_DNA **pdad, L_HASHMAP **phmap)
l_dnaRemoveDupsByHmap()
L_DNA * l_dnaSelectRange(L_DNA *das, l_int32 first, l_int32 last)
l_dnaSelectRange()
NUMA * l_dnaConvertToNuma(L_DNA *da)
l_dnaConvertToNuma()
l_ok l_dnaRemoveDupsByAset(L_DNA *das, L_DNA **pdad)
l_dnaRemoveDupsByAset()
L_DNA * numaConvertToDna(NUMA *na)
numaConvertToDna
L_HASHMAP * l_hmapCreateFromDna(L_DNA *da)
l_hmapCreateFromDna()
l_ok l_dnaIntersectionByAset(L_DNA *da1, L_DNA *da2, L_DNA **pdad)
l_dnaIntersectionByAset()
l_ok l_dnaIntersectionByHmap(L_DNA *da1, L_DNA *da2, L_DNA **pdad)
l_dnaIntersectionByHmap()
struct L_Hashitem ** hashtab