78 #include <config_auto.h>
81 #include "allheaders.h"
111 PROCNAME(
"l_dnaJoin");
114 return ERROR_INT(
"dad not defined", procName, 1);
121 if (iend < 0 || iend >= n)
124 return ERROR_INT(
"istart > iend; nothing to add", procName, 1);
126 for (i = istart; i <= iend; i++) {
129 L_ERROR(
"failed to add double at i = %d\n", procName, i);
158 PROCNAME(
"l_dnaaFlattenToDna");
161 return (
L_DNA *)ERROR_PTR(
"daa not defined", procName, NULL);
166 for (i = 0; i < nalloc; i++) {
193 PROCNAME(
"l_dnaSelectRange");
196 return (
L_DNA *)ERROR_PTR(
"das not defined", procName, NULL);
198 L_WARNING(
"das is empty\n", procName);
201 first = L_MAX(0, first);
202 if (last < 0) last = n - 1;
204 return (
L_DNA *)ERROR_PTR(
"invalid first", procName, NULL);
206 L_WARNING(
"last = %d is beyond max index = %d; adjusting\n",
207 procName, last, n - 1);
211 return (
L_DNA *)ERROR_PTR(
"first > last", procName, NULL);
214 for (i = first; i <= last; i++) {
238 PROCNAME(
"l_dnaConvertToNuma");
241 return (
NUMA *)ERROR_PTR(
"da not defined", procName, NULL);
245 for (i = 0; i < n; i++) {
266 PROCNAME(
"numaConvertToDna");
269 return (
L_DNA *)ERROR_PTR(
"na not defined", procName, NULL);
273 for (i = 0; i < n; i++) {
298 l_int32 i, j, w, h, wpl;
299 l_uint32 *data, *line;
302 PROCNAME(
"pixConvertDataToDna");
305 return (
L_DNA *)ERROR_PTR(
"pix not defined", procName, NULL);
306 if (pixGetDepth(pix) != 32)
307 return (
L_DNA *)ERROR_PTR(
"pix not 32 bpp", procName, NULL);
311 wpl = pixGetWpl(pix);
313 for (i = 0; i < h; i++) {
314 line = data + i * wpl;
315 for (j = 0; j < w; j++)
339 PROCNAME(
"l_asetCreateFromDna");
342 return (
L_ASET *)ERROR_PTR(
"da not defined", procName, NULL);
344 set = l_asetCreate(L_FLOAT_TYPE);
346 for (i = 0; i < n; i++) {
349 l_asetInsert(set, key);
373 PROCNAME(
"l_dnaRemoveDupsByAset");
376 return ERROR_INT(
"&dad not defined", procName, 1);
379 return ERROR_INT(
"das not defined", procName, 1);
381 set = l_asetCreate(L_FLOAT_TYPE);
385 for (i = 0; i < n; i++) {
388 if (!l_asetFind(set, key)) {
390 l_asetInsert(set, key);
422 PROCNAME(
"l_dnaUnionByAset");
425 return ERROR_INT(
"&dad not defined", procName, 1);
427 return ERROR_INT(
"da1 not defined", procName, 1);
429 return ERROR_INT(
"da2 not defined", procName, 1);
435 return ERROR_INT(
"join failed for da3", procName, 1);
466 l_int32 n1, n2, i, n;
470 L_DNA *da_small, *da_big, *dad;
472 PROCNAME(
"l_dnaIntersectionByAset");
475 return ERROR_INT(
"&dad not defined", procName, 1);
478 return ERROR_INT(
"&da1 not defined", procName, 1);
480 return ERROR_INT(
"&da2 not defined", procName, 1);
485 da_small = (n1 < n2) ? da1 : da2;
486 da_big = (n1 < n2) ? da2 : da1;
493 set2 = l_asetCreate(L_FLOAT_TYPE);
494 for (i = 0; i < n; i++) {
497 if (l_asetFind(set1, key) && !l_asetFind(set2, key)) {
499 l_asetInsert(set2, key);
503 l_asetDestroy(&set1);
504 l_asetDestroy(&set2);
534 PROCNAME(
"l_hmapCreateFromDna");
537 return (
L_HASHMAP *)ERROR_PTR(
"da not defined", procName, NULL);
540 hmap = l_hmapCreate(0, 0);
541 for (i = 0; i < n; i++) {
544 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
576 PROCNAME(
"l_dnaRemoveDupsByHmap");
578 if (phmap) *phmap = NULL;
580 return ERROR_INT(
"&dad not defined", procName, 1);
583 return ERROR_INT(
"das not defined", procName, 1);
587 return ERROR_INT(
"hmap not made", procName, 1);
591 for (i = 0; i < tabsize; i++) {
603 l_hmapDestroy(&hmap);
628 PROCNAME(
"l_dnaUnionByHmap");
631 return ERROR_INT(
"&dad not defined", procName, 1);
634 return ERROR_INT(
"da1 not defined", procName, 1);
636 return ERROR_INT(
"da2 not defined", procName, 1);
641 return ERROR_INT(
"da3 join failed", procName, 1);
668 l_int32 i, n1, n2, n;
671 L_DNA *da_small, *da_big, *dad;
675 PROCNAME(
"l_dnaIntersectionByHmap");
678 return ERROR_INT(
"&dad not defined", procName, 1);
681 return ERROR_INT(
"da1 not defined", procName, 1);
683 return ERROR_INT(
"da2 not defined", procName, 1);
688 da_small = (n1 < n2) ? da1 : da2;
689 da_big = (n1 < n2) ? da2 : da1;
691 return ERROR_INT(
"hmap not made", procName, 1);
701 for (i = 0; i < n; i++) {
704 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
705 if (!hitem || hitem->
count == 0)
710 l_hmapDestroy(&hmap);
740 PROCNAME(
"l_dnaMakeHistoByHmap");
742 if (pdav) *pdav = NULL;
743 if (pdac) *pdac = NULL;
745 return ERROR_INT(
"das not defined", procName, 1);
747 return ERROR_INT(
"&dav not defined", procName, 1);
749 return ERROR_INT(
"&dac not defined", procName, 1);
753 return ERROR_INT(
"hmap not made", procName, 1);
759 for (i = 0; i < tabsize; i++) {
769 l_hmapDestroy(&hmap);
787 l_int32 i, n, prev, cur;
790 PROCNAME(
"l_dnaDiffAdjValues");
793 return (
L_DNA *)ERROR_PTR(
"das not defined", procName, NULL);
797 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()