97 #include "allheaders.h" 99 static const l_int32 INITIAL_PTR_ARRAYSIZE = 20;
120 PROCNAME(
"ptaCreate");
123 n = INITIAL_PTR_ARRAYSIZE;
125 pta = (
PTA *)LEPT_CALLOC(1,
sizeof(
PTA));
128 ptaChangeRefcount(pta, 1);
130 pta->x = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32));
131 pta->
y = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32));
132 if (!pta->x || !pta->
y) {
134 return (
PTA *)ERROR_PTR(
"x and y arrays not both made", procName, NULL);
153 l_float32 startx, delx, xval, yval;
156 PROCNAME(
"ptaCreateFromNuma");
159 return (
PTA *)ERROR_PTR(
"nay not defined", procName, NULL);
162 return (
PTA *)ERROR_PTR(
"nax and nay sizes differ", procName, NULL);
166 for (i = 0; i < n; i++) {
170 xval = startx + i * delx;
196 PROCNAME(
"ptaDestroy");
199 L_WARNING(
"ptr address is NULL!\n", procName);
203 if ((pta = *ppta) == NULL)
206 ptaChangeRefcount(pta, -1);
207 if (ptaGetRefcount(pta) <= 0) {
234 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
237 return (
PTA *)ERROR_PTR(
"npta not made", procName, NULL);
239 for (i = 0; i < pta->
n; i++) {
264 PROCNAME(
"ptaCopyRange");
267 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
272 return (
PTA *)ERROR_PTR(
"istart out of bounds", procName, NULL);
273 if (iend <= 0 || iend >= n)
276 return (
PTA *)ERROR_PTR(
"istart > iend; no pts", procName, NULL);
278 if ((ptad =
ptaCreate(iend - istart + 1)) == NULL)
279 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
280 for (i = istart; i <= iend; i++) {
298 PROCNAME(
"ptaClone");
301 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
303 ptaChangeRefcount(pta, 1);
322 PROCNAME(
"ptaEmpty");
325 return ERROR_INT(
"ptad not defined", procName, 1);
348 PROCNAME(
"ptaAddPt");
351 return ERROR_INT(
"pta not defined", procName, 1);
373 PROCNAME(
"ptaExtendArrays");
376 return ERROR_INT(
"pta not defined", procName, 1);
378 if ((pta->x = (l_float32 *)
reallocNew((
void **)&pta->x,
379 sizeof(l_float32) * pta->
nalloc,
380 2 *
sizeof(l_float32) * pta->
nalloc)) == NULL)
381 return ERROR_INT(
"new x array not returned", procName, 1);
383 sizeof(l_float32) * pta->
nalloc,
384 2 *
sizeof(l_float32) * pta->
nalloc)) == NULL)
385 return ERROR_INT(
"new y array not returned", procName, 1);
411 PROCNAME(
"ptaInsertPt");
414 return ERROR_INT(
"pta not defined", procName, 1);
416 if (index < 0 || index > n)
417 return ERROR_INT(
"index not in {0...n}", procName, 1);
422 for (i = n; i > index; i--) {
423 pta->x[i] = pta->x[i - 1];
424 pta->
y[i] = pta->
y[i - 1];
452 PROCNAME(
"ptaRemovePt");
455 return ERROR_INT(
"pta not defined", procName, 1);
457 if (index < 0 || index >= n)
458 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
461 for (i = index + 1; i < n; i++) {
462 pta->x[i - 1] = pta->x[i];
463 pta->
y[i - 1] = pta->
y[i];
474 ptaGetRefcount(
PTA *pta)
476 PROCNAME(
"ptaGetRefcount");
479 return ERROR_INT(
"pta not defined", procName, 1);
485 ptaChangeRefcount(
PTA *pta,
488 PROCNAME(
"ptaChangeRefcount");
491 return ERROR_INT(
"pta not defined", procName, 1);
506 PROCNAME(
"ptaGetCount");
509 return ERROR_INT(
"pta not defined", procName, 0);
530 PROCNAME(
"ptaGetPt");
535 return ERROR_INT(
"pta not defined", procName, 1);
536 if (index < 0 || index >= pta->
n)
537 return ERROR_INT(
"invalid index", procName, 1);
539 if (px) *px = pta->x[index];
540 if (py) *py = pta->
y[index];
560 PROCNAME(
"ptaGetIPt");
565 return ERROR_INT(
"pta not defined", procName, 1);
566 if (index < 0 || index >= pta->
n)
567 return ERROR_INT(
"invalid index", procName, 1);
569 if (px) *px = (l_int32)(pta->x[index] + 0.5);
570 if (py) *py = (l_int32)(pta->
y[index] + 0.5);
589 PROCNAME(
"ptaSetPt");
592 return ERROR_INT(
"pta not defined", procName, 1);
593 if (index < 0 || index >= pta->
n)
594 return ERROR_INT(
"invalid index", procName, 1);
623 PROCNAME(
"ptaGetArrays");
626 return ERROR_INT(
"no output requested", procName, 1);
627 if (pnax) *pnax = NULL;
628 if (pnay) *pnay = NULL;
630 return ERROR_INT(
"pta not defined", procName, 1);
632 return ERROR_INT(
"pta is empty", procName, 1);
636 return ERROR_INT(
"nax not made", procName, 1);
638 for (i = 0; i < n; i++)
639 nax->
array[i] = pta->x[i];
644 return ERROR_INT(
"nay not made", procName, 1);
646 for (i = 0; i < n; i++)
647 nay->
array[i] = pta->
y[i];
672 return (
PTA *)ERROR_PTR(
"filename not defined", procName, NULL);
675 return (
PTA *)ERROR_PTR(
"stream not opened", procName, NULL);
679 return (
PTA *)ERROR_PTR(
"pta not read", procName, NULL);
694 l_int32 i, n, ix, iy, type, version;
698 PROCNAME(
"ptaReadStream");
701 return (
PTA *)ERROR_PTR(
"stream not defined", procName, NULL);
703 if (fscanf(fp,
"\n Pta Version %d\n", &version) != 1)
704 return (
PTA *)ERROR_PTR(
"not a pta file", procName, NULL);
706 return (
PTA *)ERROR_PTR(
"invalid pta version", procName, NULL);
707 if (fscanf(fp,
" Number of pts = %d; format = %127s\n", &n, typestr) != 2)
708 return (
PTA *)ERROR_PTR(
"not a pta file", procName, NULL);
709 if (!strcmp(typestr,
"float"))
715 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
716 for (i = 0; i < n; i++) {
718 if (fscanf(fp,
" (%f, %f)\n", &x, &y) != 2) {
720 return (
PTA *)ERROR_PTR(
"error reading floats", procName, NULL);
724 if (fscanf(fp,
" (%d, %d)\n", &ix, &iy) != 2) {
726 return (
PTA *)ERROR_PTR(
"error reading ints", procName, NULL);
750 PROCNAME(
"ptaReadMem");
753 return (
PTA *)ERROR_PTR(
"data not defined", procName, NULL);
755 return (
PTA *)ERROR_PTR(
"stream not opened", procName, NULL);
759 if (!pta) L_ERROR(
"pta not read\n", procName);
786 PROCNAME(
"ptaWriteDebug");
789 return ptaWrite(filename, pta, type);
791 L_INFO(
"write to named temp file %s is disabled\n", procName, filename);
813 PROCNAME(
"ptaWrite");
816 return ERROR_INT(
"filename not defined", procName, 1);
818 return ERROR_INT(
"pta not defined", procName, 1);
821 return ERROR_INT(
"stream not opened", procName, 1);
825 return ERROR_INT(
"pta not written to stream", procName, 1);
843 l_int32 i, n, ix, iy;
846 PROCNAME(
"ptaWriteStream");
849 return ERROR_INT(
"stream not defined", procName, 1);
851 return ERROR_INT(
"pta not defined", procName, 1);
856 fprintf(fp,
" Number of pts = %d; format = float\n", n);
858 fprintf(fp,
" Number of pts = %d; format = integer\n", n);
859 for (i = 0; i < n; i++) {
862 fprintf(fp,
" (%f, %f)\n", x, y);
865 fprintf(fp,
" (%d, %d)\n", ix, iy);
896 PROCNAME(
"ptaWriteMem");
898 if (pdata) *pdata = NULL;
899 if (psize) *psize = 0;
901 return ERROR_INT(
"&data not defined", procName, 1);
903 return ERROR_INT(
"&size not defined", procName, 1);
905 return ERROR_INT(
"pta not defined", procName, 1);
908 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
909 return ERROR_INT(
"stream not opened", procName, 1);
912 L_INFO(
"work-around: writing to a temp file\n", procName);
915 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
917 if ((fp = tmpfile()) == NULL)
918 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
943 PROCNAME(
"ptaaCreate");
946 n = INITIAL_PTR_ARRAYSIZE;
948 if ((ptaa = (
PTAA *)LEPT_CALLOC(1,
sizeof(
PTAA))) == NULL)
949 return (
PTAA *)ERROR_PTR(
"ptaa not made", procName, NULL);
952 if ((ptaa->
pta = (
PTA **)LEPT_CALLOC(n,
sizeof(
PTA *))) == NULL) {
954 return (
PTAA *)ERROR_PTR(
"pta ptrs not made", procName, NULL);
972 PROCNAME(
"ptaaDestroy");
975 L_WARNING(
"ptr address is NULL!\n", procName);
979 if ((ptaa = *pptaa) == NULL)
982 for (i = 0; i < ptaa->
n; i++)
984 LEPT_FREE(ptaa->
pta);
1011 PROCNAME(
"ptaaAddPta");
1014 return ERROR_INT(
"ptaa not defined", procName, 1);
1016 return ERROR_INT(
"pta not defined", procName, 1);
1020 }
else if (copyflag ==
L_COPY) {
1021 if ((ptac =
ptaCopy(pta)) == NULL)
1022 return ERROR_INT(
"ptac not made", procName, 1);
1023 }
else if (copyflag ==
L_CLONE) {
1024 if ((ptac =
ptaClone(pta)) == NULL)
1025 return ERROR_INT(
"pta clone not made", procName, 1);
1027 return ERROR_INT(
"invalid copyflag", procName, 1);
1033 ptaa->
pta[n] = ptac;
1049 PROCNAME(
"ptaaExtendArray");
1052 return ERROR_INT(
"ptaa not defined", procName, 1);
1056 2 *
sizeof(
PTA *) * ptaa->
nalloc)) == NULL)
1057 return ERROR_INT(
"new ptr array not returned", procName, 1);
1076 PROCNAME(
"ptaaGetCount");
1079 return ERROR_INT(
"ptaa not defined", procName, 0);
1098 PROCNAME(
"ptaaGetPta");
1101 return (
PTA *)ERROR_PTR(
"ptaa not defined", procName, NULL);
1102 if (index < 0 || index >= ptaa->
n)
1103 return (
PTA *)ERROR_PTR(
"index not valid", procName, NULL);
1105 if (accessflag ==
L_COPY)
1107 else if (accessflag ==
L_CLONE)
1110 return (
PTA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1133 PROCNAME(
"ptaaGetPt");
1138 return ERROR_INT(
"ptaa not defined", procName, 1);
1139 if (ipta < 0 || ipta >= ptaa->
n)
1140 return ERROR_INT(
"index ipta not valid", procName, 1);
1143 if (jpt < 0 || jpt >= pta->
n) {
1145 return ERROR_INT(
"index jpt not valid", procName, 1);
1171 PROCNAME(
"ptaaInitFull");
1174 return ERROR_INT(
"ptaa not defined", procName, 1);
1176 return ERROR_INT(
"pta not defined", procName, 1);
1180 for (i = 0; i < n; i++) {
1210 PROCNAME(
"ptaaReplacePta");
1213 return ERROR_INT(
"ptaa not defined", procName, 1);
1215 return ERROR_INT(
"pta not defined", procName, 1);
1217 if (index < 0 || index >= n)
1218 return ERROR_INT(
"index not valid", procName, 1);
1221 ptaa->
pta[index] = pta;
1242 PROCNAME(
"ptaaAddPt");
1245 return ERROR_INT(
"ptaa not defined", procName, 1);
1246 if (ipta < 0 || ipta >= ptaa->
n)
1247 return ERROR_INT(
"index ipta not valid", procName, 1);
1275 PROCNAME(
"ptaaTruncate");
1278 return ERROR_INT(
"ptaa not defined", procName, 1);
1281 for (i = n - 1; i >= 0; i--) {
1315 PROCNAME(
"ptaaRead");
1318 return (
PTAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1321 return (
PTAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1325 return (
PTAA *)ERROR_PTR(
"ptaa not read", procName, NULL);
1339 l_int32 i, n, version;
1343 PROCNAME(
"ptaaReadStream");
1346 return (
PTAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1348 if (fscanf(fp,
"\nPtaa Version %d\n", &version) != 1)
1349 return (
PTAA *)ERROR_PTR(
"not a ptaa file", procName, NULL);
1351 return (
PTAA *)ERROR_PTR(
"invalid ptaa version", procName, NULL);
1352 if (fscanf(fp,
"Number of Pta = %d\n", &n) != 1)
1353 return (
PTAA *)ERROR_PTR(
"not a ptaa file", procName, NULL);
1356 return (
PTAA *)ERROR_PTR(
"ptaa not made", procName, NULL);
1357 for (i = 0; i < n; i++) {
1360 return (
PTAA *)ERROR_PTR(
"error reading pta", procName, NULL);
1383 PROCNAME(
"ptaaReadMem");
1386 return (
PTAA *)ERROR_PTR(
"data not defined", procName, NULL);
1388 return (
PTAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1392 if (!ptaa) L_ERROR(
"ptaa not read\n", procName);
1419 PROCNAME(
"ptaaWriteDebug");
1424 L_INFO(
"write to named temp file %s is disabled\n", procName, filename);
1446 PROCNAME(
"ptaaWrite");
1449 return ERROR_INT(
"filename not defined", procName, 1);
1451 return ERROR_INT(
"ptaa not defined", procName, 1);
1454 return ERROR_INT(
"stream not opened", procName, 1);
1458 return ERROR_INT(
"ptaa not written to stream", procName, 1);
1479 PROCNAME(
"ptaaWriteStream");
1482 return ERROR_INT(
"stream not defined", procName, 1);
1484 return ERROR_INT(
"ptaa not defined", procName, 1);
1488 fprintf(fp,
"Number of Pta = %d\n", n);
1489 for (i = 0; i < n; i++) {
1522 PROCNAME(
"ptaaWriteMem");
1524 if (pdata) *pdata = NULL;
1525 if (psize) *psize = 0;
1527 return ERROR_INT(
"&data not defined", procName, 1);
1529 return ERROR_INT(
"&size not defined", procName, 1);
1531 return ERROR_INT(
"ptaa not defined", procName, 1);
1534 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1535 return ERROR_INT(
"stream not opened", procName, 1);
1538 L_INFO(
"work-around: writing to a temp file\n", procName);
1541 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1543 if ((fp = tmpfile()) == NULL)
1544 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_ok ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py)
ptaaGetPt()
PTA * ptaCopyRange(PTA *ptas, l_int32 istart, l_int32 iend)
ptaCopyRange()
l_ok ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y)
ptaaAddPt()
l_ok ptaWriteStream(FILE *fp, PTA *pta, l_int32 type)
ptaWriteStream()
l_ok ptaInsertPt(PTA *pta, l_int32 index, l_int32 x, l_int32 y)
ptaInsertPt()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
PTA * ptaReadMem(const l_uint8 *data, size_t size)
ptaReadMem()
#define PTA_VERSION_NUMBER
PTA * ptaCreate(l_int32 n)
ptaCreate()
static l_int32 ptaaExtendArray(PTAA *ptaa)
ptaaExtendArray()
l_ok ptaaTruncate(PTAA *ptaa)
ptaaTruncate()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
l_ok ptaGetArrays(PTA *pta, NUMA **pnax, NUMA **pnay)
ptaGetArrays()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
PTA * ptaRead(const char *filename)
ptaRead()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
PTA * ptaClone(PTA *pta)
ptaClone()
l_ok ptaaWriteStream(FILE *fp, PTAA *ptaa, l_int32 type)
ptaaWriteStream()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
PTA * ptaCreateFromNuma(NUMA *nax, NUMA *nay)
ptaCreateFromNuma()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
l_ok ptaaInitFull(PTAA *ptaa, PTA *pta)
ptaaInitFull()
l_ok ptaaReplacePta(PTAA *ptaa, l_int32 index, PTA *pta)
ptaaReplacePta()
l_ok numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
l_ok ptaRemovePt(PTA *pta, l_int32 index)
ptaRemovePt()
PTA * ptaCopy(PTA *pta)
ptaCopy()
static l_int32 ptaExtendArrays(PTA *pta)
ptaExtendArrays()
l_ok ptaSetPt(PTA *pta, l_int32 index, l_float32 x, l_float32 y)
ptaSetPt()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
l_ok ptaEmpty(PTA *pta)
ptaEmpty()
l_ok ptaWrite(const char *filename, PTA *pta, l_int32 type)
ptaWrite()
l_ok ptaWriteDebug(const char *filename, PTA *pta, l_int32 type)
ptaWriteDebug()
l_ok ptaaWriteMem(l_uint8 **pdata, size_t *psize, PTAA *ptaa, l_int32 type)
ptaaWriteMem()
l_ok ptaaWrite(const char *filename, PTAA *ptaa, l_int32 type)
ptaaWrite()
void ptaDestroy(PTA **ppta)
ptaDestroy()
PTAA * ptaaReadStream(FILE *fp)
ptaaReadStream()
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()
l_ok ptaWriteMem(l_uint8 **pdata, size_t *psize, PTA *pta, l_int32 type)
ptaWriteMem()
PTAA * ptaaReadMem(const l_uint8 *data, size_t size)
ptaaReadMem()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
PTA * ptaReadStream(FILE *fp)
ptaReadStream()
l_ok ptaaWriteDebug(const char *filename, PTAA *ptaa, l_int32 type)
ptaaWriteDebug()
PTAA * ptaaRead(const char *filename)
ptaaRead()