78 #include <config_auto.h>
81 #include "allheaders.h"
114 return ERROR_INT(
"dad not defined", __func__, 1);
121 if (iend < 0 || iend >= n)
124 return ERROR_INT(
"istart > iend; nothing to add", __func__, 1);
126 for (i = istart; i <= iend; i++) {
129 L_ERROR(
"failed to add double at i = %d\n", __func__, i);
159 return (
L_DNA *)ERROR_PTR(
"daa not defined", __func__, NULL);
164 for (i = 0; i < nalloc; i++) {
192 return (
L_DNA *)ERROR_PTR(
"das not defined", __func__, NULL);
194 L_WARNING(
"das is empty\n", __func__);
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);
210 for (i = first; i <= last; i++) {
235 return (
NUMA *)ERROR_PTR(
"da not defined", __func__, NULL);
239 for (i = 0; i < n; i++) {
261 return (
L_DNA *)ERROR_PTR(
"na not defined", __func__, NULL);
265 for (i = 0; i < n; i++) {
290 l_int32 i, j, w, h, wpl;
291 l_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);
301 wpl = pixGetWpl(pix);
303 for (i = 0; i < h; i++) {
304 line = data + i * wpl;
305 for (j = 0; j < w; j++)
330 return (
L_ASET *)ERROR_PTR(
"da not defined", __func__, NULL);
332 set = l_asetCreate(L_FLOAT_TYPE);
334 for (i = 0; i < n; i++) {
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);
371 for (i = 0; i < n; i++) {
374 if (!l_asetFind(set, key)) {
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);
419 return ERROR_INT(
"join failed for da3", __func__, 1);
450 l_int32 n1, n2, i, n;
454 L_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);
467 da_small = (n1 < n2) ? da1 : da2;
468 da_big = (n1 < n2) ? da2 : da1;
475 set2 = l_asetCreate(L_FLOAT_TYPE);
476 for (i = 0; i < n; i++) {
479 if (l_asetFind(set1, key) && !l_asetFind(set2, key)) {
481 l_asetInsert(set2, key);
485 l_asetDestroy(&set1);
486 l_asetDestroy(&set2);
517 return (
L_HASHMAP *)ERROR_PTR(
"da not defined", __func__, NULL);
520 hmap = l_hmapCreate(0, 0);
521 for (i = 0; i < n; i++) {
524 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
555 if (phmap) *phmap = NULL;
557 return ERROR_INT(
"&dad not defined", __func__, 1);
560 return ERROR_INT(
"das not defined", __func__, 1);
564 return ERROR_INT(
"hmap not made", __func__, 1);
568 for (i = 0; i < tabsize; i++) {
580 l_hmapDestroy(&hmap);
606 return ERROR_INT(
"&dad not defined", __func__, 1);
609 return ERROR_INT(
"da1 not defined", __func__, 1);
611 return ERROR_INT(
"da2 not defined", __func__, 1);
616 return ERROR_INT(
"da3 join failed", __func__, 1);
643 l_int32 i, n1, n2, n;
646 L_DNA *da_small, *da_big, *dad;
651 return ERROR_INT(
"&dad not defined", __func__, 1);
654 return ERROR_INT(
"da1 not defined", __func__, 1);
656 return ERROR_INT(
"da2 not defined", __func__, 1);
661 da_small = (n1 < n2) ? da1 : da2;
662 da_big = (n1 < n2) ? da2 : da1;
664 return ERROR_INT(
"hmap not made", __func__, 1);
674 for (i = 0; i < n; i++) {
677 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
678 if (!hitem || hitem->
count == 0)
683 l_hmapDestroy(&hmap);
713 if (pdav) *pdav = NULL;
714 if (pdac) *pdac = NULL;
716 return ERROR_INT(
"das not defined", __func__, 1);
718 return ERROR_INT(
"&dav not defined", __func__, 1);
720 return ERROR_INT(
"&dac not defined", __func__, 1);
724 return ERROR_INT(
"hmap not made", __func__, 1);
730 for (i = 0; i < tabsize; i++) {
740 l_hmapDestroy(&hmap);
758 l_int32 i, n, prev, cur;
762 return (
L_DNA *)ERROR_PTR(
"das not defined", __func__, NULL);
766 for (i = 1; i < n; i++) {
L_DNA * l_dnaCreate(l_int32 n)
l_dnaCreate()
l_ok l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival)
l_dnaGetIValue()
l_ok l_dnaAddNumber(L_DNA *da, l_float64 val)
l_dnaAddNumber()
l_ok l_dnaGetDValue(L_DNA *da, l_int32 index, l_float64 *pval)
l_dnaGetDValue()
void l_dnaDestroy(L_DNA **pda)
l_dnaDestroy()
L_DNA * l_dnaCopy(L_DNA *da)
l_dnaCopy()
l_int32 l_dnaGetCount(L_DNA *da)
l_dnaGetCount()
L_DNA * l_dnaSelectRange(L_DNA *das, l_int32 first, l_int32 last)
l_dnaSelectRange()
l_ok l_dnaUnionByAset(L_DNA *da1, L_DNA *da2, L_DNA **pdad)
l_dnaUnionByAset()
l_ok l_dnaUnionByHmap(L_DNA *da1, L_DNA *da2, L_DNA **pdad)
l_dnaUnionByHmap()
NUMA * l_dnaConvertToNuma(L_DNA *da)
l_dnaConvertToNuma()
L_ASET * l_asetCreateFromDna(L_DNA *da)
l_asetCreateFromDna()
L_DNA * l_dnaDiffAdjValues(L_DNA *das)
l_dnaDiffAdjValues()
l_ok l_dnaJoin(L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend)
l_dnaJoin()
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 * numaConvertToDna(NUMA *na)
numaConvertToDna
L_DNA * l_dnaaFlattenToDna(L_DNAA *daa)
l_dnaaFlattenToDna()
l_ok l_dnaRemoveDupsByAset(L_DNA *das, L_DNA **pdad)
l_dnaRemoveDupsByAset()
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()
L_DNA * pixConvertDataToDna(PIX *pix)
pixConvertDataToDna()
L_HASHMAP * l_hmapCreateFromDna(L_DNA *da)
l_hmapCreateFromDna()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
struct L_Hashitem ** hashtab
l_ok l_hashFloat64ToUint64(l_float64 val, l_uint64 *phash)
l_hashFloat64ToUint64()