96 #include "allheaders.h" 98 static const l_int32 INITIAL_PTR_ARRAYSIZE = 20;
119 PROCNAME(
"ptaCreate");
122 n = INITIAL_PTR_ARRAYSIZE;
124 pta = (
PTA *)LEPT_CALLOC(1,
sizeof(
PTA));
127 ptaChangeRefcount(pta, 1);
129 pta->x = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32));
130 pta->
y = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32));
131 if (!pta->x || !pta->
y) {
133 return (
PTA *)ERROR_PTR(
"x and y arrays not both made", procName, NULL);
152 l_float32 startx, delx, xval, yval;
155 PROCNAME(
"ptaCreateFromNuma");
158 return (
PTA *)ERROR_PTR(
"nay not defined", procName, NULL);
161 return (
PTA *)ERROR_PTR(
"nax and nay sizes differ", procName, NULL);
165 for (i = 0; i < n; i++) {
169 xval = startx + i * delx;
195 PROCNAME(
"ptaDestroy");
198 L_WARNING(
"ptr address is NULL!\n", procName);
202 if ((pta = *ppta) == NULL)
205 ptaChangeRefcount(pta, -1);
206 if (ptaGetRefcount(pta) <= 0) {
233 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
236 return (
PTA *)ERROR_PTR(
"npta not made", procName, NULL);
238 for (i = 0; i < pta->
n; i++) {
263 PROCNAME(
"ptaCopyRange");
266 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
271 return (
PTA *)ERROR_PTR(
"istart out of bounds", procName, NULL);
272 if (iend <= 0 || iend >= n)
275 return (
PTA *)ERROR_PTR(
"istart > iend; no pts", procName, NULL);
277 if ((ptad =
ptaCreate(iend - istart + 1)) == NULL)
278 return (
PTA *)ERROR_PTR(
"ptad not made", procName, NULL);
279 for (i = istart; i <= iend; i++) {
297 PROCNAME(
"ptaClone");
300 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
302 ptaChangeRefcount(pta, 1);
321 PROCNAME(
"ptaEmpty");
324 return ERROR_INT(
"ptad not defined", procName, 1);
347 PROCNAME(
"ptaAddPt");
350 return ERROR_INT(
"pta not defined", procName, 1);
372 PROCNAME(
"ptaExtendArrays");
375 return ERROR_INT(
"pta not defined", procName, 1);
377 if ((pta->x = (l_float32 *)
reallocNew((
void **)&pta->x,
378 sizeof(l_float32) * pta->
nalloc,
379 2 *
sizeof(l_float32) * pta->
nalloc)) == NULL)
380 return ERROR_INT(
"new x array not returned", procName, 1);
382 sizeof(l_float32) * pta->
nalloc,
383 2 *
sizeof(l_float32) * pta->
nalloc)) == NULL)
384 return ERROR_INT(
"new y array not returned", procName, 1);
410 PROCNAME(
"ptaInsertPt");
413 return ERROR_INT(
"pta not defined", procName, 1);
415 if (index < 0 || index > n)
416 return ERROR_INT(
"index not in {0...n}", procName, 1);
421 for (i = n; i > index; i--) {
422 pta->x[i] = pta->x[i - 1];
423 pta->
y[i] = pta->
y[i - 1];
451 PROCNAME(
"ptaRemovePt");
454 return ERROR_INT(
"pta not defined", procName, 1);
456 if (index < 0 || index >= n)
457 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
460 for (i = index + 1; i < n; i++) {
461 pta->x[i - 1] = pta->x[i];
462 pta->
y[i - 1] = pta->
y[i];
473 ptaGetRefcount(
PTA *pta)
475 PROCNAME(
"ptaGetRefcount");
478 return ERROR_INT(
"pta not defined", procName, 1);
484 ptaChangeRefcount(
PTA *pta,
487 PROCNAME(
"ptaChangeRefcount");
490 return ERROR_INT(
"pta not defined", procName, 1);
505 PROCNAME(
"ptaGetCount");
508 return ERROR_INT(
"pta not defined", procName, 0);
529 PROCNAME(
"ptaGetPt");
534 return ERROR_INT(
"pta not defined", procName, 1);
535 if (index < 0 || index >= pta->
n)
536 return ERROR_INT(
"invalid index", procName, 1);
538 if (px) *px = pta->x[index];
539 if (py) *py = pta->
y[index];
559 PROCNAME(
"ptaGetIPt");
564 return ERROR_INT(
"pta not defined", procName, 1);
565 if (index < 0 || index >= pta->
n)
566 return ERROR_INT(
"invalid index", procName, 1);
568 if (px) *px = (l_int32)(pta->x[index] + 0.5);
569 if (py) *py = (l_int32)(pta->
y[index] + 0.5);
588 PROCNAME(
"ptaSetPt");
591 return ERROR_INT(
"pta not defined", procName, 1);
592 if (index < 0 || index >= pta->
n)
593 return ERROR_INT(
"invalid index", procName, 1);
622 PROCNAME(
"ptaGetArrays");
625 return ERROR_INT(
"no output requested", procName, 1);
626 if (pnax) *pnax = NULL;
627 if (pnay) *pnay = NULL;
629 return ERROR_INT(
"pta not defined", procName, 1);
631 return ERROR_INT(
"pta is empty", procName, 1);
635 return ERROR_INT(
"nax not made", procName, 1);
637 for (i = 0; i < n; i++)
638 nax->
array[i] = pta->x[i];
643 return ERROR_INT(
"nay not made", procName, 1);
645 for (i = 0; i < n; i++)
646 nay->
array[i] = pta->
y[i];
671 return (
PTA *)ERROR_PTR(
"filename not defined", procName, NULL);
674 return (
PTA *)ERROR_PTR(
"stream not opened", procName, NULL);
678 return (
PTA *)ERROR_PTR(
"pta not read", procName, NULL);
693 l_int32 i, n, ix, iy, type, version;
697 PROCNAME(
"ptaReadStream");
700 return (
PTA *)ERROR_PTR(
"stream not defined", procName, NULL);
702 if (fscanf(fp,
"\n Pta Version %d\n", &version) != 1)
703 return (
PTA *)ERROR_PTR(
"not a pta file", procName, NULL);
705 return (
PTA *)ERROR_PTR(
"invalid pta version", procName, NULL);
706 if (fscanf(fp,
" Number of pts = %d; format = %127s\n", &n, typestr) != 2)
707 return (
PTA *)ERROR_PTR(
"not a pta file", procName, NULL);
708 if (!strcmp(typestr,
"float"))
714 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
715 for (i = 0; i < n; i++) {
717 if (fscanf(fp,
" (%f, %f)\n", &x, &y) != 2) {
719 return (
PTA *)ERROR_PTR(
"error reading floats", procName, NULL);
723 if (fscanf(fp,
" (%d, %d)\n", &ix, &iy) != 2) {
725 return (
PTA *)ERROR_PTR(
"error reading ints", procName, NULL);
749 PROCNAME(
"ptaReadMem");
752 return (
PTA *)ERROR_PTR(
"data not defined", procName, NULL);
754 return (
PTA *)ERROR_PTR(
"stream not opened", procName, NULL);
758 if (!pta) L_ERROR(
"pta not read\n", procName);
779 PROCNAME(
"ptaWrite");
782 return ERROR_INT(
"filename not defined", procName, 1);
784 return ERROR_INT(
"pta not defined", procName, 1);
787 return ERROR_INT(
"stream not opened", procName, 1);
791 return ERROR_INT(
"pta not written to stream", procName, 1);
809 l_int32 i, n, ix, iy;
812 PROCNAME(
"ptaWriteStream");
815 return ERROR_INT(
"stream not defined", procName, 1);
817 return ERROR_INT(
"pta not defined", procName, 1);
822 fprintf(fp,
" Number of pts = %d; format = float\n", n);
824 fprintf(fp,
" Number of pts = %d; format = integer\n", n);
825 for (i = 0; i < n; i++) {
828 fprintf(fp,
" (%f, %f)\n", x, y);
831 fprintf(fp,
" (%d, %d)\n", ix, iy);
862 PROCNAME(
"ptaWriteMem");
864 if (pdata) *pdata = NULL;
865 if (psize) *psize = 0;
867 return ERROR_INT(
"&data not defined", procName, 1);
869 return ERROR_INT(
"&size not defined", procName, 1);
871 return ERROR_INT(
"pta not defined", procName, 1);
874 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
875 return ERROR_INT(
"stream not opened", procName, 1);
878 L_INFO(
"work-around: writing to a temp file\n", procName);
881 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
883 if ((fp = tmpfile()) == NULL)
884 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
909 PROCNAME(
"ptaaCreate");
912 n = INITIAL_PTR_ARRAYSIZE;
914 if ((ptaa = (
PTAA *)LEPT_CALLOC(1,
sizeof(
PTAA))) == NULL)
915 return (
PTAA *)ERROR_PTR(
"ptaa not made", procName, NULL);
918 if ((ptaa->
pta = (
PTA **)LEPT_CALLOC(n,
sizeof(
PTA *))) == NULL) {
920 return (
PTAA *)ERROR_PTR(
"pta ptrs not made", procName, NULL);
938 PROCNAME(
"ptaaDestroy");
941 L_WARNING(
"ptr address is NULL!\n", procName);
945 if ((ptaa = *pptaa) == NULL)
948 for (i = 0; i < ptaa->
n; i++)
950 LEPT_FREE(ptaa->
pta);
977 PROCNAME(
"ptaaAddPta");
980 return ERROR_INT(
"ptaa not defined", procName, 1);
982 return ERROR_INT(
"pta not defined", procName, 1);
986 }
else if (copyflag ==
L_COPY) {
987 if ((ptac =
ptaCopy(pta)) == NULL)
988 return ERROR_INT(
"ptac not made", procName, 1);
989 }
else if (copyflag ==
L_CLONE) {
991 return ERROR_INT(
"pta clone not made", procName, 1);
993 return ERROR_INT(
"invalid copyflag", procName, 1);
1015 PROCNAME(
"ptaaExtendArray");
1018 return ERROR_INT(
"ptaa not defined", procName, 1);
1022 2 *
sizeof(
PTA *) * ptaa->
nalloc)) == NULL)
1023 return ERROR_INT(
"new ptr array not returned", procName, 1);
1042 PROCNAME(
"ptaaGetCount");
1045 return ERROR_INT(
"ptaa not defined", procName, 0);
1064 PROCNAME(
"ptaaGetPta");
1067 return (
PTA *)ERROR_PTR(
"ptaa not defined", procName, NULL);
1068 if (index < 0 || index >= ptaa->
n)
1069 return (
PTA *)ERROR_PTR(
"index not valid", procName, NULL);
1071 if (accessflag ==
L_COPY)
1073 else if (accessflag ==
L_CLONE)
1076 return (
PTA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1099 PROCNAME(
"ptaaGetPt");
1104 return ERROR_INT(
"ptaa not defined", procName, 1);
1105 if (ipta < 0 || ipta >= ptaa->
n)
1106 return ERROR_INT(
"index ipta not valid", procName, 1);
1109 if (jpt < 0 || jpt >= pta->
n) {
1111 return ERROR_INT(
"index jpt not valid", procName, 1);
1137 PROCNAME(
"ptaaInitFull");
1140 return ERROR_INT(
"ptaa not defined", procName, 1);
1142 return ERROR_INT(
"pta not defined", procName, 1);
1146 for (i = 0; i < n; i++) {
1176 PROCNAME(
"ptaaReplacePta");
1179 return ERROR_INT(
"ptaa not defined", procName, 1);
1181 return ERROR_INT(
"pta not defined", procName, 1);
1183 if (index < 0 || index >= n)
1184 return ERROR_INT(
"index not valid", procName, 1);
1187 ptaa->
pta[index] = pta;
1208 PROCNAME(
"ptaaAddPt");
1211 return ERROR_INT(
"ptaa not defined", procName, 1);
1212 if (ipta < 0 || ipta >= ptaa->
n)
1213 return ERROR_INT(
"index ipta not valid", procName, 1);
1241 PROCNAME(
"ptaaTruncate");
1244 return ERROR_INT(
"ptaa not defined", procName, 1);
1247 for (i = n - 1; i >= 0; i--) {
1281 PROCNAME(
"ptaaRead");
1284 return (
PTAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1287 return (
PTAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1291 return (
PTAA *)ERROR_PTR(
"ptaa not read", procName, NULL);
1305 l_int32 i, n, version;
1309 PROCNAME(
"ptaaReadStream");
1312 return (
PTAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1314 if (fscanf(fp,
"\nPtaa Version %d\n", &version) != 1)
1315 return (
PTAA *)ERROR_PTR(
"not a ptaa file", procName, NULL);
1317 return (
PTAA *)ERROR_PTR(
"invalid ptaa version", procName, NULL);
1318 if (fscanf(fp,
"Number of Pta = %d\n", &n) != 1)
1319 return (
PTAA *)ERROR_PTR(
"not a ptaa file", procName, NULL);
1322 return (
PTAA *)ERROR_PTR(
"ptaa not made", procName, NULL);
1323 for (i = 0; i < n; i++) {
1326 return (
PTAA *)ERROR_PTR(
"error reading pta", procName, NULL);
1349 PROCNAME(
"ptaaReadMem");
1352 return (
PTAA *)ERROR_PTR(
"data not defined", procName, NULL);
1354 return (
PTAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1358 if (!ptaa) L_ERROR(
"ptaa not read\n", procName);
1379 PROCNAME(
"ptaaWrite");
1382 return ERROR_INT(
"filename not defined", procName, 1);
1384 return ERROR_INT(
"ptaa not defined", procName, 1);
1387 return ERROR_INT(
"stream not opened", procName, 1);
1391 return ERROR_INT(
"ptaa not written to stream", procName, 1);
1412 PROCNAME(
"ptaaWriteStream");
1415 return ERROR_INT(
"stream not defined", procName, 1);
1417 return ERROR_INT(
"ptaa not defined", procName, 1);
1421 fprintf(fp,
"Number of Pta = %d\n", n);
1422 for (i = 0; i < n; i++) {
1455 PROCNAME(
"ptaaWriteMem");
1457 if (pdata) *pdata = NULL;
1458 if (psize) *psize = 0;
1460 return ERROR_INT(
"&data not defined", procName, 1);
1462 return ERROR_INT(
"&size not defined", procName, 1);
1464 return ERROR_INT(
"ptaa not defined", procName, 1);
1467 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1468 return ERROR_INT(
"stream not opened", procName, 1);
1471 L_INFO(
"work-around: writing to a temp file\n", procName);
1474 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1476 if ((fp = tmpfile()) == NULL)
1477 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
l_int32 ptaaInitFull(PTAA *ptaa, PTA *pta)
ptaaInitFull()
l_int32 ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
PTA * ptaCopyRange(PTA *ptas, l_int32 istart, l_int32 iend)
ptaCopyRange()
l_int32 ptaSetPt(PTA *pta, l_int32 index, l_float32 x, l_float32 y)
ptaSetPt()
l_int32 ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
PTA * ptaReadMem(const l_uint8 *data, size_t size)
ptaReadMem()
l_int32 ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
#define PTA_VERSION_NUMBER
PTA * ptaCreate(l_int32 n)
ptaCreate()
l_int32 numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
static l_int32 ptaaExtendArray(PTAA *ptaa)
ptaaExtendArray()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
l_int32 numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
l_int32 ptaaWriteMem(l_uint8 **pdata, size_t *psize, PTAA *ptaa, l_int32 type)
ptaaWriteMem()
PTA * ptaRead(const char *filename)
ptaRead()
l_int32 ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py)
ptaaGetPt()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
static const l_int32 L_INSERT
l_int32 ptaWriteMem(l_uint8 **pdata, size_t *psize, PTA *pta, l_int32 type)
ptaWriteMem()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
PTA * ptaClone(PTA *pta)
ptaClone()
l_int32 ptaEmpty(PTA *pta)
ptaEmpty()
l_int32 ptaInsertPt(PTA *pta, l_int32 index, l_int32 x, l_int32 y)
ptaInsertPt()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
PTA * ptaCreateFromNuma(NUMA *nax, NUMA *nay)
ptaCreateFromNuma()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
l_int32 ptaRemovePt(PTA *pta, l_int32 index)
ptaRemovePt()
PTA * ptaCopy(PTA *pta)
ptaCopy()
static l_int32 ptaExtendArrays(PTA *pta)
ptaExtendArrays()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_int32 ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_int32 ptaWrite(const char *filename, PTA *pta, l_int32 type)
ptaWrite()
l_int32 ptaaTruncate(PTAA *ptaa)
ptaaTruncate()
l_int32 ptaaWriteStream(FILE *fp, PTAA *ptaa, l_int32 type)
ptaaWriteStream()
l_int32 ptaaReplacePta(PTAA *ptaa, l_int32 index, PTA *pta)
ptaaReplacePta()
PTAA * ptaaReadStream(FILE *fp)
ptaaReadStream()
l_int32 ptaaWrite(const char *filename, PTAA *ptaa, l_int32 type)
ptaaWrite()
PTAA * ptaaReadMem(const l_uint8 *data, size_t size)
ptaaReadMem()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
l_int32 ptaWriteStream(FILE *fp, PTA *pta, l_int32 type)
ptaWriteStream()
PTA * ptaReadStream(FILE *fp)
ptaReadStream()
l_int32 ptaGetArrays(PTA *pta, NUMA **pnax, NUMA **pnay)
ptaGetArrays()
PTAA * ptaaRead(const char *filename)
ptaaRead()
l_int32 ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y)
ptaaAddPt()