78 #include <config_auto.h> 81 #include "allheaders.h" 107 if (pnaindex) *pnaindex = NULL;
109 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
111 return (
PTA *)ERROR_PTR(
"invalid sort type", procName, NULL);
113 return (
PTA *)ERROR_PTR(
"invalid sort order", procName, NULL);
116 return (
PTA *)ERROR_PTR(
"naindex not made", procName, NULL);
124 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
148 PROCNAME(
"ptaGetSortIndex");
151 return ERROR_INT(
"&naindex not defined", procName, 1);
154 return ERROR_INT(
"ptas not defined", procName, 1);
156 return ERROR_INT(
"invalid sort type", procName, 1);
158 return ERROR_INT(
"invalid sort order", procName, 1);
163 return ERROR_INT(
"na not made", procName, 1);
164 for (i = 0; i < n; i++) {
176 return ERROR_INT(
"naindex not made", procName, 1);
197 PROCNAME(
"ptaSortByIndex");
200 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
202 return (
PTA *)ERROR_PTR(
"naindex not defined", procName, NULL);
207 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
208 for (i = 0; i < n; i++) {
233 PROCNAME(
"ptaaSortByIndex");
236 return (
PTAA *)ERROR_PTR(
"ptaas not defined", procName, NULL);
238 return (
PTAA *)ERROR_PTR(
"naindex not defined", procName, NULL);
242 return (
PTAA *)ERROR_PTR(
"numa and ptaa sizes differ", procName, NULL);
244 for (i = 0; i < n; i++) {
274 PROCNAME(
"ptaGetRankValue");
277 return ERROR_INT(
"&val not defined", procName, 1);
280 return ERROR_INT(
"pta not defined", procName, 1);
282 return ERROR_INT(
"invalid sort type", procName, 1);
283 if (fract < 0.0 || fract > 1.0)
284 return ERROR_INT(
"fract not in [0.0 ... 1.0]", procName, 1);
286 return ERROR_INT(
"pta empty", procName, 1);
293 index = (l_int32)(fract * (l_float32)(n - 1) + 0.5);
319 l_int32 index, i, j, n, nx, ny, start, end;
320 l_float32 x, y, yp, val;
321 NUMA *na1, *na2, *nas, *nax;
324 PROCNAME(
"ptaSort2d");
327 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
339 for (i = 1; i < n; i++) {
352 for (i = 0, index = 0; i < ny; i++) {
355 nx = end - start + 1;
362 for (j = 0; j < nx; j++) {
368 for (j = 0; j < nx; j++) {
404 l_float32 x1, y1, x2, y2;
407 PROCNAME(
"ptaEqual");
410 return ERROR_INT(
"&same not defined", procName, 1);
413 return ERROR_INT(
"pta1 and pta2 not both defined", procName, 1);
417 if (n1 != n2)
return 0;
422 for (i = 0; i < n1; i++) {
425 if (x1 != x2 || y1 != y2) {
456 PROCNAME(
"l_asetCreateFromPta");
459 return (
L_ASET *)ERROR_PTR(
"pta not defined", procName, NULL);
461 set = l_asetCreate(L_UINT_TYPE);
463 for (i = 0; i < n; i++) {
467 l_asetInsert(set, key);
498 PROCNAME(
"ptaRemoveDupsByAset");
501 return ERROR_INT(
"&ptad not defined", procName, 1);
504 return ERROR_INT(
"ptas not defined", procName, 1);
506 set = l_asetCreate(L_UINT_TYPE);
510 for (i = 0; i < n; i++) {
514 if (!l_asetFind(set, key)) {
516 l_asetInsert(set, key);
551 PROCNAME(
"ptaUnionByAset");
554 return ERROR_INT(
"&ptad not defined", procName, 1);
557 return ERROR_INT(
"pta1 not defined", procName, 1);
559 return ERROR_INT(
"pta2 not defined", procName, 1);
594 l_int32 n1, n2, i, n, x, y;
598 PTA *pta_small, *pta_big, *ptad;
600 PROCNAME(
"ptaIntersectionByAset");
603 return ERROR_INT(
"&ptad not defined", procName, 1);
606 return ERROR_INT(
"pta1 not defined", procName, 1);
608 return ERROR_INT(
"pta2 not defined", procName, 1);
613 pta_small = (n1 < n2) ? pta1 : pta2;
614 pta_big = (n1 < n2) ? pta2 : pta1;
621 set2 = l_asetCreate(L_UINT_TYPE);
622 for (i = 0; i < n; i++) {
626 if (l_asetFind(set1, key) && !l_asetFind(set2, key)) {
628 l_asetInsert(set2, key);
632 l_asetDestroy(&set1);
633 l_asetDestroy(&set2);
661 PROCNAME(
"l_hmapCreateFromPta");
664 return (
L_HASHMAP *)ERROR_PTR(
"pta not defined", procName, NULL);
667 if ((hmap = l_hmapCreate(0.51 * n, 2)) == NULL)
668 return (
L_HASHMAP *)ERROR_PTR(
"hmap not made", procName, NULL);
669 for (i = 0; i < n; i++) {
672 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CREATE);
696 l_int32 i, x, y, tabsize;
702 PROCNAME(
"ptaRemoveDupsByHmap");
704 if (phmap) *phmap = NULL;
706 return ERROR_INT(
"&ptad not defined", procName, 1);
709 return ERROR_INT(
"ptas not defined", procName, 1);
713 return ERROR_INT(
"hmap not made", procName, 1);
717 for (i = 0; i < tabsize; i++) {
729 l_hmapDestroy(&hmap);
754 PROCNAME(
"ptaUnionByHmap");
757 return ERROR_INT(
"&ptad not defined", procName, 1);
760 return ERROR_INT(
"pta1 not defined", procName, 1);
762 return ERROR_INT(
"pta2 not defined", procName, 1);
765 if (
ptaJoin(pta3, pta2, 0, -1) == 1) {
767 return ERROR_INT(
"pta join failed", procName, 1);
793 l_int32 i, n1, n2, n, x, y;
795 PTA *pta_small, *pta_big, *ptad;
799 PROCNAME(
"ptaIntersectionByHmap");
802 return ERROR_INT(
"&ptad not defined", procName, 1);
805 return ERROR_INT(
"pta1 not defined", procName, 1);
807 return ERROR_INT(
"pta2 not defined", procName, 1);
812 pta_small = (n1 < n2) ? pta1 : pta2;
813 pta_big = (n1 < n2) ? pta2 : pta1;
815 return ERROR_INT(
"hmap not made", procName, 1);
825 for (i = 0; i < n; i++) {
828 hitem = l_hmapLookup(hmap, key, i, L_HMAP_CHECK);
829 if (!hitem || hitem->
count == 0)
834 l_hmapDestroy(&hmap);
l_ok ptaIntersectionByHmap(PTA *pta1, PTA *pta2, PTA **pptad)
ptaIntersectionByHmap()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
PTA * ptaSort2d(PTA *pta)
ptaSort2d()
l_ok l_hashPtToUint64(l_int32 x, l_int32 y, l_uint64 *phash)
l_hashPtToUint64()
l_ok ptaGetRankValue(PTA *pta, l_float32 fract, PTA *ptasort, l_int32 sorttype, l_float32 *pval)
ptaGetRankValue()
NUMA * numaGetSortIndex(NUMA *na, l_int32 sortorder)
numaGetSortIndex()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_ok ptaUnionByHmap(PTA *pta1, PTA *pta2, PTA **pptad)
ptaUnionByHmap()
L_HASHMAP * l_hmapCreateFromPta(PTA *pta)
l_hmapCreateFromPta()
PTA * ptaCreate(l_int32 n)
ptaCreate()
NUMA * numaSort(NUMA *naout, NUMA *nain, l_int32 sortorder)
numaSort()
l_ok ptaGetSortIndex(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex)
ptaGetSortIndex()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
PTA * ptaSort(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex)
ptaSort()
l_ok ptaRemoveDupsByHmap(PTA *ptas, PTA **pptad, L_HASHMAP **phmap)
ptaRemoveDupsByHmap()
l_ok ptaRemoveDupsByAset(PTA *ptas, PTA **pptad)
ptaRemoveDupsByAset()
l_ok ptaUnionByAset(PTA *pta1, PTA *pta2, PTA **pptad)
ptaUnionByAset()
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
PTAA * ptaaSortByIndex(PTAA *ptaas, NUMA *naindex)
ptaaSortByIndex()
l_ok ptaIntersectionByAset(PTA *pta1, PTA *pta2, PTA **pptad)
ptaIntersectionByAset()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok ptaEqual(PTA *pta1, PTA *pta2, l_int32 *psame)
ptaEqual()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
struct L_Hashitem ** hashtab
PTA * ptaCopy(PTA *pta)
ptaCopy()
void numaDestroy(NUMA **pna)
numaDestroy()
L_ASET * l_asetCreateFromPta(PTA *pta)
l_asetCreateFromPta()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
PTA * ptaSortByIndex(PTA *ptas, NUMA *naindex)
ptaSortByIndex()