135 #include <config_auto.h> 139 #include "allheaders.h" 142 static const size_t MaxBoxaPtrArraySize = 10000000;
143 static const size_t MaxBoxaaPtrArraySize = 1000000;
179 PROCNAME(
"boxCreate");
182 return (
BOX *)ERROR_PTR(
"w and h not both >= 0", procName, NULL);
187 return (
BOX *)ERROR_PTR(
"x < 0 and box off +quad", procName, NULL);
193 return (
BOX *)ERROR_PTR(
"y < 0 and box off +quad", procName, NULL);
196 box = (
BOX *)LEPT_CALLOC(1,
sizeof(
BOX));
220 PROCNAME(
"boxCreateValid");
222 if (w <= 0 || h <= 0)
223 return (
BOX *)ERROR_PTR(
"w and h not both > 0", procName, NULL);
242 return (
BOX *)ERROR_PTR(
"box not defined", procName, NULL);
259 PROCNAME(
"boxClone");
262 return (
BOX *)ERROR_PTR(
"box not defined", procName, NULL);
286 PROCNAME(
"boxDestroy");
289 L_WARNING(
"ptr address is null!\n", procName);
292 if ((box = *pbox) == NULL)
319 PROCNAME(
"boxGetGeometry");
326 return ERROR_INT(
"box not defined", procName, 1);
327 if (px) *px = box->
x;
328 if (py) *py = box->
y;
329 if (pw) *pw = box->
w;
330 if (ph) *ph = box->
h;
349 PROCNAME(
"boxSetGeometry");
352 return ERROR_INT(
"box not defined", procName, 1);
353 if (x != -1) box->
x = x;
354 if (y != -1) box->
y = y;
355 if (w != -1) box->
w = w;
356 if (h != -1) box->
h = h;
382 PROCNAME(
"boxGetSideLocations");
389 return ERROR_INT(
"box not defined", procName, 1);
393 if (pr) *pr = x + w - 1;
395 if (pb) *pb = y + h - 1;
416 PROCNAME(
"boxSetSideLocations");
419 return ERROR_INT(
"box not defined", procName, 1);
420 x = (l != -1) ? l : box->
x;
421 w = (r != -1) ? r - x + 1 : box->
x + box->
w - x;
422 y = (t != -1) ? t : box->
y;
423 h = (b != -1) ? b - y + 1 : box->
y + box->
h - y;
438 PROCNAME(
"boxGetRefcount");
441 return ERROR_INT(
"box not defined", procName, UNDEF);
457 PROCNAME(
"boxChangeRefcount");
460 return ERROR_INT(
"box not defined", procName, 1);
478 PROCNAME(
"boxIsValid");
481 return ERROR_INT(
"&valid not defined", procName, 1);
484 return ERROR_INT(
"box not defined", procName, 1);
486 if (box->
w > 0 && box->
h > 0)
506 PROCNAME(
"boxaCreate");
508 if (n <= 0 || n > MaxBoxaPtrArraySize)
511 boxa = (
BOXA *)LEPT_CALLOC(1,
sizeof(
BOXA));
515 if ((boxa->
box = (
BOX **)LEPT_CALLOC(n,
sizeof(
BOX *))) == NULL) {
517 return (
BOXA *)ERROR_PTR(
"boxa ptrs not made", procName, NULL);
544 PROCNAME(
"boxaCopy");
547 return (
BOXA *)ERROR_PTR(
"boxa not defined", procName, NULL);
555 return (
BOXA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
558 return (
BOXA *)ERROR_PTR(
"boxac not made", procName, NULL);
559 for (i = 0; i < boxa->
n; i++) {
588 PROCNAME(
"boxaDestroy");
591 L_WARNING(
"ptr address is null!\n", procName);
595 if ((boxa = *pboxa) == NULL)
601 for (i = 0; i < boxa->
n; i++)
603 LEPT_FREE(boxa->
box);
627 PROCNAME(
"boxaAddBox");
630 return ERROR_INT(
"boxa not defined", procName, 1);
632 return ERROR_INT(
"box not defined", procName, 1);
636 else if (copyflag ==
L_COPY)
641 return ERROR_INT(
"invalid copyflag", procName, 1);
643 return ERROR_INT(
"boxc not made", procName, 1);
650 return ERROR_INT(
"extension failed", procName, 1);
673 PROCNAME(
"boxaExtendArray");
676 return ERROR_INT(
"boxa not defined", procName, 1);
699 size_t oldsize, newsize;
701 PROCNAME(
"boxaExtendArrayToSize");
704 return ERROR_INT(
"boxa not defined", procName, 1);
705 if (boxa->
nalloc > MaxBoxaPtrArraySize)
706 return ERROR_INT(
"boxa has too many ptrs", procName, 1);
707 if (size > MaxBoxaPtrArraySize)
708 return ERROR_INT(
"size > 10M box ptrs; too large", procName, 1);
709 if (size <= boxa->nalloc) {
710 L_INFO(
"size too small; no extension\n", procName);
715 newsize = size *
sizeof(
BOX *);
717 oldsize, newsize)) == NULL)
718 return ERROR_INT(
"new ptr array not returned", procName, 1);
736 PROCNAME(
"boxaGetCount");
739 return ERROR_INT(
"boxa not defined", procName, 0);
753 l_int32 n, i, w, h, count;
755 PROCNAME(
"boxaGetValidCount");
758 return ERROR_INT(
"boxa not defined", procName, 0);
761 for (i = 0, count = 0; i < n; i++) {
783 PROCNAME(
"boxaGetBox");
786 return (
BOX *)ERROR_PTR(
"boxa not defined", procName, NULL);
787 if (index < 0 || index >= boxa->
n)
788 return (
BOX *)ERROR_PTR(
"index not valid", procName, NULL);
792 else if (accessflag ==
L_CLONE)
795 return (
BOX *)ERROR_PTR(
"invalid accessflag", procName, NULL);
825 PROCNAME(
"boxaGetValidBox");
828 return (
BOX *)ERROR_PTR(
"boxa not defined", procName, NULL);
830 if ((box =
boxaGetBox(boxa, index, accessflag)) == NULL)
831 return (
BOX *)ERROR_PTR(
"box not returned", procName, NULL);
833 if (w <= 0 || h <= 0)
851 PROCNAME(
"boxaFindInvalidBoxes");
854 return (
NUMA *)ERROR_PTR(
"boxa not defined", procName, NULL);
861 for (i = 0; i < n; i++) {
863 if (w == 0 || h == 0)
888 PROCNAME(
"boxaGetBoxGeometry");
895 return ERROR_INT(
"boxa not defined", procName, 1);
896 if (index < 0 || index >= boxa->
n)
897 return ERROR_INT(
"index not valid", procName, 1);
900 return ERROR_INT(
"box not found!", procName, 1);
921 PROCNAME(
"boxaIsFull");
924 return ERROR_INT(
"&full not defined", procName, 1);
927 return ERROR_INT(
"boxa not defined", procName, 1);
931 for (i = 0; i < n; i++) {
966 PROCNAME(
"boxaReplaceBox");
969 return ERROR_INT(
"boxa not defined", procName, 1);
970 if (index < 0 || index >= boxa->
n)
971 return ERROR_INT(
"index not valid", procName, 1);
973 return ERROR_INT(
"box not defined", procName, 1);
976 boxa->
box[index] = box;
1007 PROCNAME(
"boxaInsertBox");
1010 return ERROR_INT(
"boxa not defined", procName, 1);
1012 if (index < 0 || index > n) {
1013 L_ERROR(
"index %d not in [0,...,%d]\n", procName, index, n);
1017 return ERROR_INT(
"box not defined", procName, 1);
1021 return ERROR_INT(
"extension failed", procName, 1);
1025 for (i = n; i > index; i--)
1026 array[i] = array[i - 1];
1079 PROCNAME(
"boxaRemoveBoxAndSave");
1081 if (pbox) *pbox = NULL;
1083 return ERROR_INT(
"boxa not defined", procName, 1);
1085 if (index < 0 || index >= n) {
1086 L_ERROR(
"index %d not in [0,...,%d]\n", procName, index, n - 1);
1094 for (i = index + 1; i < n; i++)
1095 array[i - 1] = array[i];
1096 array[n - 1] = NULL;
1123 PROCNAME(
"boxaSaveValid");
1126 return (
BOXA *)ERROR_PTR(
"boxas not defined", procName, NULL);
1128 return (
BOXA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
1132 for (i = 0; i < n; i++) {
1186 PROCNAME(
"boxaInitFull");
1189 return ERROR_INT(
"boxa not defined", procName, 1);
1193 for (i = 0; i < n; i++) {
1221 PROCNAME(
"boxaClear");
1224 return ERROR_INT(
"boxa not defined", procName, 1);
1227 for (i = 0; i < n; i++)
1248 PROCNAME(
"boxaaCreate");
1250 if (n <= 0 || n > MaxBoxaaPtrArraySize)
1253 baa = (
BOXAA *)LEPT_CALLOC(1,
sizeof(
BOXAA));
1254 if ((baa->
boxa = (
BOXA **)LEPT_CALLOC(n,
sizeof(
BOXA *))) == NULL) {
1256 return (
BOXAA *)ERROR_PTR(
"boxa ptr array not made", procName, NULL);
1286 PROCNAME(
"boxaaCopy");
1289 return (
BOXAA *)ERROR_PTR(
"baas not defined", procName, NULL);
1291 return (
BOXAA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
1295 for (i = 0; i < n; i++) {
1315 PROCNAME(
"boxaaDestroy");
1318 L_WARNING(
"ptr address is NULL!\n", procName);
1322 if ((baa = *pbaa) == NULL)
1325 for (i = 0; i < baa->
n; i++)
1327 LEPT_FREE(baa->
boxa);
1353 PROCNAME(
"boxaaAddBoxa");
1356 return ERROR_INT(
"baa not defined", procName, 1);
1358 return ERROR_INT(
"ba not defined", procName, 1);
1360 return ERROR_INT(
"invalid copyflag", procName, 1);
1370 return ERROR_INT(
"extension failed", procName, 1);
1393 PROCNAME(
"boxaaExtendArray");
1396 return ERROR_INT(
"baa not defined", procName, 1);
1419 size_t oldsize, newsize;
1421 PROCNAME(
"boxaaExtendArrayToSize");
1424 return ERROR_INT(
"baa not defined", procName, 1);
1425 if (baa->
nalloc > MaxBoxaaPtrArraySize)
1426 return ERROR_INT(
"baa has too many ptrs", procName, 1);
1427 if (size > MaxBoxaaPtrArraySize)
1428 return ERROR_INT(
"size > 1M boxa ptrs; too large", procName, 1);
1429 if (size <= baa->nalloc) {
1430 L_INFO(
"size too small; no extension\n", procName);
1435 newsize = size *
sizeof(
BOXA *);
1437 oldsize, newsize)) == NULL)
1438 return ERROR_INT(
"new ptr array not returned", procName, 1);
1456 PROCNAME(
"boxaaGetCount");
1459 return ERROR_INT(
"baa not defined", procName, 0);
1476 PROCNAME(
"boxaaGetBoxCount");
1479 return ERROR_INT(
"baa not defined", procName, 0);
1482 for (sum = 0, i = 0; i < n; i++) {
1507 PROCNAME(
"boxaaGetBoxa");
1510 return (
BOXA *)ERROR_PTR(
"baa not defined", procName, NULL);
1512 if (index < 0 || index >= n)
1513 return (
BOXA *)ERROR_PTR(
"index not valid", procName, NULL);
1515 return (
BOXA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1539 PROCNAME(
"boxaaGetBox");
1542 return (
BOX *)ERROR_PTR(
"boxa not retrieved", procName, NULL);
1543 if ((box =
boxaGetBox(boxa, ibox, accessflag)) == NULL)
1544 L_ERROR(
"box not retrieved\n", procName);
1589 PROCNAME(
"boxaaInitFull");
1592 return ERROR_INT(
"baa not defined", procName, 1);
1594 return ERROR_INT(
"boxa not defined", procName, 1);
1598 for (i = 0; i < n; i++) {
1629 PROCNAME(
"boxaaExtendWithInit");
1632 return ERROR_INT(
"baa not defined", procName, 1);
1634 return ERROR_INT(
"boxa not defined", procName, 1);
1638 if (maxindex < n)
return 0;
1640 return ERROR_INT(
"extension failed", procName, 1);
1643 for (i = n; i <= maxindex; i++)
1671 PROCNAME(
"boxaaReplaceBoxa");
1674 return ERROR_INT(
"baa not defined", procName, 1);
1676 return ERROR_INT(
"boxa not defined", procName, 1);
1678 if (index < 0 || index >= n)
1679 return ERROR_INT(
"index not valid", procName, 1);
1682 baa->
boxa[index] = boxa;
1714 PROCNAME(
"boxaaInsertBoxa");
1717 return ERROR_INT(
"baa not defined", procName, 1);
1719 if (index < 0 || index > n) {
1720 L_ERROR(
"index %d not in [0,...,%d]\n", procName, index, n);
1724 return ERROR_INT(
"boxa not defined", procName, 1);
1728 return ERROR_INT(
"extension failed", procName, 1);
1732 for (i = n; i > index; i--)
1733 array[i] = array[i - 1];
1734 array[index] = boxa;
1762 PROCNAME(
"boxaaRemoveBox");
1765 return ERROR_INT(
"baa not defined", procName, 1);
1767 if (index < 0 || index >= n)
1768 return ERROR_INT(
"index not valid", procName, 1);
1772 for (i = index + 1; i < n; i++)
1773 array[i - 1] = array[i];
1774 array[n - 1] = NULL;
1803 PROCNAME(
"boxaaAddBox");
1806 return ERROR_INT(
"baa not defined", procName, 1);
1808 if (index < 0 || index >= n)
1809 return ERROR_INT(
"index not valid", procName, 1);
1811 return ERROR_INT(
"invalid accessflag", procName, 1);
1855 PROCNAME(
"boxaaReadFromFiles");
1858 return (
BOXAA *)ERROR_PTR(
"dirname not defined", procName, NULL);
1863 return (
BOXAA *)ERROR_PTR(
"no pixa files found", procName, NULL);
1867 for (i = 0; i < n; i++) {
1869 if ((boxa =
boxaRead(fname)) == NULL) {
1870 L_ERROR(
"boxa not read for %d-th file", procName, i);
1893 PROCNAME(
"boxaaRead");
1896 return (
BOXAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1899 return (
BOXAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1903 return (
BOXAA *)ERROR_PTR(
"boxaa not read", procName, NULL);
1922 l_int32 n, i, x, y, w, h, version;
1927 PROCNAME(
"boxaaReadStream");
1930 return (
BOXAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1932 if (fscanf(fp,
"\nBoxaa Version %d\n", &version) != 1)
1933 return (
BOXAA *)ERROR_PTR(
"not a boxaa file", procName, NULL);
1935 return (
BOXAA *)ERROR_PTR(
"invalid boxa version", procName, NULL);
1936 if (fscanf(fp,
"Number of boxa = %d\n", &n) != 1)
1937 return (
BOXAA *)ERROR_PTR(
"not a boxaa file", procName, NULL);
1939 return (
BOXAA *)ERROR_PTR(
"num boxa ptrs < 0", procName, NULL);
1940 if (n > MaxBoxaaPtrArraySize)
1941 return (
BOXAA *)ERROR_PTR(
"too many boxa ptrs", procName, NULL);
1942 if (n == 0) L_INFO(
"the boxaa is empty\n", procName);
1945 return (
BOXAA *)ERROR_PTR(
"boxaa not made", procName, NULL);
1946 for (i = 0; i < n; i++) {
1947 if (fscanf(fp,
"\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d",
1948 &ignore, &x, &y, &w, &h) != 5) {
1950 return (
BOXAA *)ERROR_PTR(
"boxa descr not valid", procName, NULL);
1954 return (
BOXAA *)ERROR_PTR(
"boxa not made", procName, NULL);
1976 PROCNAME(
"boxaaReadMem");
1979 return (
BOXAA *)ERROR_PTR(
"data not defined", procName, NULL);
1981 return (
BOXAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1985 if (!baa) L_ERROR(
"baa not read\n", procName);
2004 PROCNAME(
"boxaaWrite");
2007 return ERROR_INT(
"filename not defined", procName, 1);
2009 return ERROR_INT(
"baa not defined", procName, 1);
2012 return ERROR_INT(
"stream not opened", procName, 1);
2016 return ERROR_INT(
"baa not written to stream", procName, 1);
2032 l_int32 n, i, x, y, w, h;
2036 PROCNAME(
"boxaaWriteStream");
2039 return ERROR_INT(
"stream not defined", procName, 1);
2041 return ERROR_INT(
"baa not defined", procName, 1);
2045 fprintf(fp,
"Number of boxa = %d\n", n);
2047 for (i = 0; i < n; i++) {
2049 return ERROR_INT(
"boxa not found", procName, 1);
2052 fprintf(fp,
"\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d",
2083 PROCNAME(
"boxaaWriteMem");
2085 if (pdata) *pdata = NULL;
2086 if (psize) *psize = 0;
2088 return ERROR_INT(
"&data not defined", procName, 1);
2090 return ERROR_INT(
"&size not defined", procName, 1);
2092 return ERROR_INT(
"baa not defined", procName, 1);
2095 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
2096 return ERROR_INT(
"stream not opened", procName, 1);
2100 *psize = *psize - 1;
2102 L_INFO(
"work-around: writing to a temp file\n", procName);
2105 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2107 if ((fp = tmpfile()) == NULL)
2108 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2134 PROCNAME(
"boxaRead");
2137 return (
BOXA *)ERROR_PTR(
"filename not defined", procName, NULL);
2140 return (
BOXA *)ERROR_PTR(
"stream not opened", procName, NULL);
2144 return (
BOXA *)ERROR_PTR(
"boxa not read", procName, NULL);
2163 l_int32 n, i, x, y, w, h, version;
2168 PROCNAME(
"boxaReadStream");
2171 return (
BOXA *)ERROR_PTR(
"stream not defined", procName, NULL);
2173 if (fscanf(fp,
"\nBoxa Version %d\n", &version) != 1)
2174 return (
BOXA *)ERROR_PTR(
"not a boxa file", procName, NULL);
2176 return (
BOXA *)ERROR_PTR(
"invalid boxa version", procName, NULL);
2177 if (fscanf(fp,
"Number of boxes = %d\n", &n) != 1)
2178 return (
BOXA *)ERROR_PTR(
"not a boxa file", procName, NULL);
2180 return (
BOXA *)ERROR_PTR(
"num box ptrs < 0", procName, NULL);
2181 if (n > MaxBoxaPtrArraySize)
2182 return (
BOXA *)ERROR_PTR(
"too many box ptrs", procName, NULL);
2183 if (n == 0) L_INFO(
"the boxa is empty\n", procName);
2186 return (
BOXA *)ERROR_PTR(
"boxa not made", procName, NULL);
2187 for (i = 0; i < n; i++) {
2188 if (fscanf(fp,
" Box[%d]: x = %d, y = %d, w = %d, h = %d\n",
2189 &ignore, &x, &y, &w, &h) != 5) {
2191 return (
BOXA *)ERROR_PTR(
"box descr not valid", procName, NULL);
2214 PROCNAME(
"boxaReadMem");
2217 return (
BOXA *)ERROR_PTR(
"data not defined", procName, NULL);
2219 return (
BOXA *)ERROR_PTR(
"stream not opened", procName, NULL);
2223 if (!boxa) L_ERROR(
"boxa not read\n", procName);
2248 PROCNAME(
"boxaWriteDebug");
2253 L_INFO(
"write to named temp file %s is disabled\n", procName, filename);
2273 PROCNAME(
"boxaWrite");
2276 return ERROR_INT(
"filename not defined", procName, 1);
2278 return ERROR_INT(
"boxa not defined", procName, 1);
2281 return ERROR_INT(
"stream not opened", procName, 1);
2285 return ERROR_INT(
"boxa not written to stream", procName, 1);
2305 PROCNAME(
"boxaWriteStream");
2308 return ERROR_INT(
"boxa not defined", procName, 1);
2314 fprintf(fp,
"Number of boxes = %d\n", n);
2315 for (i = 0; i < n; i++) {
2317 return ERROR_INT(
"box not found", procName, 1);
2318 fprintf(fp,
" Box[%d]: x = %d, y = %d, w = %d, h = %d\n",
2319 i, box->
x, box->
y, box->
w, box->
h);
2338 PROCNAME(
"boxaWriteStderr");
2341 return ERROR_INT(
"boxa not defined", procName, 1);
2346 for (i = 0; i < n; i++) {
2348 return ERROR_INT(
"box not found", procName, 1);
2349 lept_stderr(
" Box[%d]: x = %d, y = %d, w = %d, h = %d\n",
2350 i, box->
x, box->
y, box->
w, box->
h);
2378 PROCNAME(
"boxaWriteMem");
2380 if (pdata) *pdata = NULL;
2381 if (psize) *psize = 0;
2383 return ERROR_INT(
"&data not defined", procName, 1);
2385 return ERROR_INT(
"&size not defined", procName, 1);
2387 return ERROR_INT(
"boxa not defined", procName, 1);
2390 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
2391 return ERROR_INT(
"stream not opened", procName, 1);
2395 *psize = *psize - 1;
2397 L_INFO(
"work-around: writing to a temp file\n", procName);
2400 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2402 if ((fp = tmpfile()) == NULL)
2403 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2434 PROCNAME(
"boxPrintStreamInfo");
2437 return ERROR_INT(
"box not defined", procName, 1);
2440 lept_stderr(
" Box: x = %d, y = %d, w = %d, h = %d\n",
2441 box->
x, box->
y, box->
w, box->
h);
2443 fprintf(fp,
" Box: x = %d, y = %d, w = %d, h = %d\n",
2444 box->
x, box->
y, box->
w, box->
h);
l_ok boxaaWrite(const char *filename, BOXAA *baa)
boxaaWrite()
#define BOXAA_VERSION_NUMBER
BOXA * boxaReadStream(FILE *fp)
boxaReadStream()
BOXAA * boxaaReadStream(FILE *fp)
boxaaReadStream()
BOX * boxaGetValidBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetValidBox()
l_ok boxaaReplaceBoxa(BOXAA *baa, l_int32 index, BOXA *boxa)
boxaaReplaceBoxa()
l_ok boxSetSideLocations(BOX *box, l_int32 l, l_int32 r, l_int32 t, l_int32 b)
boxSetSideLocations()
l_int32 boxaaGetCount(BOXAA *baa)
boxaaGetCount()
l_ok boxaExtendArray(BOXA *boxa)
boxaExtendArray()
BOXAA * boxaaReadMem(const l_uint8 *data, size_t size)
boxaaReadMem()
l_ok boxGetSideLocations(BOX *box, l_int32 *pl, l_int32 *pr, l_int32 *pt, l_int32 *pb)
boxGetSideLocations()
l_ok boxaWriteStream(FILE *fp, BOXA *boxa)
boxaWriteStream()
NUMA * numaMakeConstant(l_float32 val, l_int32 size)
numaMakeConstant()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_ok boxaReplaceBox(BOXA *boxa, l_int32 index, BOX *box)
boxaReplaceBox()
l_ok boxaaExtendWithInit(BOXAA *baa, l_int32 maxindex, BOXA *boxa)
boxaaExtendWithInit()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag)
boxaCopy()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_ok numaSetValue(NUMA *na, l_int32 index, l_float32 val)
numaSetValue()
BOX * boxClone(BOX *box)
boxClone()
l_ok boxaaWriteStream(FILE *fp, BOXAA *baa)
boxaaWriteStream()
l_ok boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag)
boxaaAddBoxa()
BOXAA * boxaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
boxaaReadFromFiles()
l_ok boxaaRemoveBoxa(BOXAA *baa, l_int32 index)
boxaaRemoveBoxa()
void boxaaDestroy(BOXAA **pbaa)
boxaaDestroy()
l_ok boxaRemoveBoxAndSave(BOXA *boxa, l_int32 index, BOX **pbox)
boxaRemoveBoxAndSave()
BOX * boxCreateValid(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreateValid()
BOXA * boxaReadMem(const l_uint8 *data, size_t size)
boxaReadMem()
l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
BOXA * boxaSaveValid(BOXA *boxas, l_int32 copyflag)
boxaSaveValid()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
l_ok boxaWriteDebug(const char *filename, BOXA *boxa)
boxaWriteDebug()
l_ok boxaExtendArrayToSize(BOXA *boxa, size_t size)
boxaExtendArrayToSize()
l_ok boxaaAddBox(BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag)
boxaaAddBox()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_ok boxaWrite(const char *filename, BOXA *boxa)
boxaWrite()
NUMA * boxaFindInvalidBoxes(BOXA *boxa)
boxaFindInvalidBoxes()
void * reallocNew(void **pindata, size_t oldsize, size_t newsize)
reallocNew()
static const size_t InitialPtrArraySize
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
getSortedPathnamesInDirectory()
l_ok boxaWriteMem(l_uint8 **pdata, size_t *psize, BOXA *boxa)
boxaWriteMem()
l_ok boxaGetExtent(BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox)
boxaGetExtent()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
FILE * fopenWriteWinTempfile(void)
fopenWriteWinTempfile()
BOXAA * boxaaCreate(l_int32 n)
boxaaCreate()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_ok boxaInitFull(BOXA *boxa, BOX *box)
boxaInitFull()
l_int32 boxGetRefcount(BOX *box)
Return the current reference count of box.
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
BOXAA * boxaaRead(const char *filename)
boxaaRead()
l_int32 boxaGetValidCount(BOXA *boxa)
boxaGetValidCount()
l_ok boxaIsFull(BOXA *boxa, l_int32 *pfull)
boxaIsFull()
l_ok boxaRemoveBox(BOXA *boxa, l_int32 index)
boxaRemoveBox()
l_ok boxaWriteStderr(BOXA *boxa)
boxaWriteStderr()
l_ok boxaaInitFull(BOXAA *baa, BOXA *boxa)
boxaaInitFull()
#define BOXA_VERSION_NUMBER
BOX * boxCopy(BOX *box)
boxCopy()
l_int32 boxaaGetBoxCount(BOXAA *baa)
boxaaGetBoxCount()
BOX * boxaaGetBox(BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag)
boxaaGetBox()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
l_ok boxaaWriteMem(l_uint8 **pdata, size_t *psize, BOXAA *baa)
boxaaWriteMem()
l_ok boxaaInsertBoxa(BOXAA *baa, l_int32 index, BOXA *boxa)
boxaaInsertBoxa()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok boxPrintStreamInfo(FILE *fp, BOX *box)
boxPrintStreamInfo()
l_ok boxaaExtendArray(BOXAA *baa)
boxaaExtendArray()
l_ok boxSetGeometry(BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxSetGeometry()
l_ok boxaClear(BOXA *boxa)
boxaClear()
BOXAA * boxaaCopy(BOXAA *baas, l_int32 copyflag)
boxaaCopy()
l_ok boxIsValid(BOX *box, l_int32 *pvalid)
boxIsValid()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
BOXA * boxaRead(const char *filename)
boxaRead()
l_ok boxChangeRefcount(BOX *box, l_int32 delta)
Adjust the current references count of box by delta.
l_ok boxaaExtendArrayToSize(BOXAA *baa, l_int32 size)
boxaaExtendArrayToSize()
l_ok boxaInsertBox(BOXA *boxa, l_int32 index, BOX *box)
boxaInsertBox()
BOXA * boxaaGetBoxa(BOXAA *baa, l_int32 index, l_int32 accessflag)
boxaaGetBoxa()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()