168 #include "allheaders.h" 170 static const l_int32 INITIAL_PTR_ARRAYSIZE = 50;
191 PROCNAME(
"numaCreate");
194 n = INITIAL_PTR_ARRAYSIZE;
196 if ((na = (
NUMA *)LEPT_CALLOC(1,
sizeof(
NUMA))) == NULL)
197 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
198 if ((na->
array = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32))) == NULL) {
200 return (
NUMA *)ERROR_PTR(
"number array not made", procName, NULL);
234 PROCNAME(
"numaCreateFromIArray");
237 return (
NUMA *)ERROR_PTR(
"iarray not defined", procName, NULL);
239 return (
NUMA *)ERROR_PTR(
"size must be > 0", procName, NULL);
242 for (i = 0; i < size; i++)
272 PROCNAME(
"numaCreateFromFArray");
275 return (
NUMA *)ERROR_PTR(
"farray not defined", procName, NULL);
277 return (
NUMA *)ERROR_PTR(
"size must be > 0", procName, NULL);
279 return (
NUMA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
287 for (i = 0; i < size; i++)
312 l_int32 i, n, nerrors;
317 PROCNAME(
"numaCreateFromString");
319 if (!str || (strlen(str) == 0))
320 return (
NUMA *)ERROR_PTR(
"str not defined or empty", procName, NULL);
323 sarraySplitString(sa, str,
",");
327 for (i = 0; i < n; i++) {
329 if (sscanf(substr,
"%f", &val) != 1) {
330 L_ERROR(
"substr %d not float\n", procName, i);
340 return (
NUMA *)ERROR_PTR(
"non-floats in string", procName, NULL);
364 PROCNAME(
"numaDestroy");
367 L_WARNING(
"ptr address is NULL\n", procName);
371 if ((na = *pna) == NULL)
378 LEPT_FREE(na->
array);
399 PROCNAME(
"numaCopy");
402 return (
NUMA *)ERROR_PTR(
"na not defined", procName, NULL);
405 return (
NUMA *)ERROR_PTR(
"cna not made", procName, NULL);
409 for (i = 0; i < na->
n; i++)
425 PROCNAME(
"numaClone");
428 return (
NUMA *)ERROR_PTR(
"na not defined", procName, NULL);
451 PROCNAME(
"numaEmpty");
454 return ERROR_INT(
"na not defined", procName, 1);
478 PROCNAME(
"numaAddNumber");
481 return ERROR_INT(
"na not defined", procName, 1);
501 PROCNAME(
"numaExtendArray");
504 return ERROR_INT(
"na not defined", procName, 1);
507 sizeof(l_float32) * na->
nalloc,
508 2 *
sizeof(l_float32) * na->
nalloc)) == NULL)
509 return ERROR_INT(
"new ptr array not returned", procName, 1);
540 PROCNAME(
"numaInsertNumber");
543 return ERROR_INT(
"na not defined", procName, 1);
545 if (index < 0 || index > n)
546 return ERROR_INT(
"index not in {0...n}", procName, 1);
550 for (i = n; i > index; i--)
552 na->
array[index] = val;
578 PROCNAME(
"numaRemoveNumber");
581 return ERROR_INT(
"na not defined", procName, 1);
583 if (index < 0 || index >= n)
584 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
586 for (i = index + 1; i < n; i++)
608 PROCNAME(
"numaReplaceNumber");
611 return ERROR_INT(
"na not defined", procName, 1);
613 if (index < 0 || index >= n)
614 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
616 na->
array[index] = val;
633 PROCNAME(
"numaGetCount");
636 return ERROR_INT(
"na not defined", procName, 0);
661 PROCNAME(
"numaSetCount");
664 return ERROR_INT(
"na not defined", procName, 1);
665 if (newcount > na->
nalloc) {
667 sizeof(l_float32) * na->
nalloc,
668 sizeof(l_float32) * newcount)) == NULL)
669 return ERROR_INT(
"new ptr array not returned", procName, 1);
696 PROCNAME(
"numaGetFValue");
699 return ERROR_INT(
"&val not defined", procName, 1);
702 return ERROR_INT(
"na not defined", procName, 1);
704 if (index < 0 || index >= na->
n)
705 return ERROR_INT(
"index not valid", procName, 1);
707 *pval = na->
array[index];
733 PROCNAME(
"numaGetIValue");
736 return ERROR_INT(
"&ival not defined", procName, 1);
739 return ERROR_INT(
"na not defined", procName, 1);
741 if (index < 0 || index >= na->
n)
742 return ERROR_INT(
"index not valid", procName, 1);
744 val = na->
array[index];
745 *pival = (l_int32)(val + L_SIGN(val) * 0.5);
763 PROCNAME(
"numaSetValue");
766 return ERROR_INT(
"na not defined", procName, 1);
767 if (index < 0 || index >= na->
n)
768 return ERROR_INT(
"index not valid", procName, 1);
770 na->
array[index] = val;
788 PROCNAME(
"numaShiftValue");
791 return ERROR_INT(
"na not defined", procName, 1);
792 if (index < 0 || index >= na->
n)
793 return ERROR_INT(
"index not valid", procName, 1);
795 na->
array[index] += diff;
825 PROCNAME(
"numaGetIArray");
828 return (l_int32 *)ERROR_PTR(
"na not defined", procName, NULL);
831 if ((array = (l_int32 *)LEPT_CALLOC(n,
sizeof(l_int32))) == NULL)
832 return (l_int32 *)ERROR_PTR(
"array not made", procName, NULL);
833 for (i = 0; i < n; i++) {
871 PROCNAME(
"numaGetFArray");
874 return (l_float32 *)ERROR_PTR(
"na not defined", procName, NULL);
880 if ((array = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32))) == NULL)
881 return (l_float32 *)ERROR_PTR(
"array not made", procName, NULL);
882 for (i = 0; i < n; i++)
883 array[i] = na->
array[i];
899 PROCNAME(
"numaGetRefcount");
902 return ERROR_INT(
"na not defined", procName, UNDEF);
918 PROCNAME(
"numaChangeRefcount");
921 return ERROR_INT(
"na not defined", procName, 1);
940 PROCNAME(
"numaGetParameters");
942 if (!pdelx && !pstartx)
943 return ERROR_INT(
"no return val requested", procName, 1);
944 if (pstartx) *pstartx = 0.0;
945 if (pdelx) *pdelx = 1.0;
947 return ERROR_INT(
"na not defined", procName, 1);
949 if (pstartx) *pstartx = na->
startx;
950 if (pdelx) *pdelx = na->
delx;
970 PROCNAME(
"numaSetParameters");
973 return ERROR_INT(
"na not defined", procName, 1);
992 l_float32 start, binsize;
994 PROCNAME(
"numaCopyParameters");
997 return ERROR_INT(
"nas and nad not both defined", procName, 1);
1033 char fmt[32], strbuf[64];
1038 PROCNAME(
"numaConvertToSarray");
1041 return (
SARRAY *)ERROR_PTR(
"na not defined", procName, NULL);
1043 return (
SARRAY *)ERROR_PTR(
"invalid type", procName, NULL);
1047 snprintf(fmt,
sizeof(fmt),
"%%0%dd", size1);
1049 snprintf(fmt,
sizeof(fmt),
"%%%dd", size1);
1051 snprintf(fmt,
sizeof(fmt),
"%%%d.%df", size1, size2);
1056 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
1058 for (i = 0; i < n; i++) {
1061 snprintf(strbuf,
sizeof(strbuf), fmt, ival);
1064 snprintf(strbuf,
sizeof(strbuf), fmt, fval);
1088 PROCNAME(
"numaRead");
1091 return (
NUMA *)ERROR_PTR(
"filename not defined", procName, NULL);
1094 return (
NUMA *)ERROR_PTR(
"stream not opened", procName, NULL);
1098 return (
NUMA *)ERROR_PTR(
"na not read", procName, NULL);
1112 l_int32 i, n, index, ret, version;
1113 l_float32 val, startx, delx;
1116 PROCNAME(
"numaReadStream");
1119 return (
NUMA *)ERROR_PTR(
"stream not defined", procName, NULL);
1121 ret = fscanf(fp,
"\nNuma Version %d\n", &version);
1123 return (
NUMA *)ERROR_PTR(
"not a numa file", procName, NULL);
1125 return (
NUMA *)ERROR_PTR(
"invalid numa version", procName, NULL);
1126 if (fscanf(fp,
"Number of numbers = %d\n", &n) != 1)
1127 return (
NUMA *)ERROR_PTR(
"invalid number of numbers", procName, NULL);
1130 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
1132 for (i = 0; i < n; i++) {
1133 if (fscanf(fp,
" [%d] = %f\n", &index, &val) != 2) {
1135 return (
NUMA *)ERROR_PTR(
"bad input data", procName, NULL);
1141 if (fscanf(fp,
"startx = %f, delx = %f\n", &startx, &delx) == 2)
1162 PROCNAME(
"numaReadMem");
1165 return (
NUMA *)ERROR_PTR(
"data not defined", procName, NULL);
1167 return (
NUMA *)ERROR_PTR(
"stream not opened", procName, NULL);
1171 if (!na) L_ERROR(
"numa not read\n", procName);
1196 PROCNAME(
"numaWriteDebug");
1201 L_INFO(
"write to named temp file %s is disabled\n", procName, filename);
1221 PROCNAME(
"numaWrite");
1224 return ERROR_INT(
"filename not defined", procName, 1);
1226 return ERROR_INT(
"na not defined", procName, 1);
1229 return ERROR_INT(
"stream not opened", procName, 1);
1233 return ERROR_INT(
"na not written to stream", procName, 1);
1250 l_float32 startx, delx;
1252 PROCNAME(
"numaWriteStream");
1255 return ERROR_INT(
"stream not defined", procName, 1);
1257 return ERROR_INT(
"na not defined", procName, 1);
1261 fprintf(fp,
"Number of numbers = %d\n", n);
1262 for (i = 0; i < n; i++)
1263 fprintf(fp,
" [%d] = %f\n", i, na->
array[i]);
1268 if (startx != 0.0 || delx != 1.0)
1269 fprintf(fp,
"startx = %f, delx = %f\n", startx, delx);
1296 PROCNAME(
"numaWriteMem");
1298 if (pdata) *pdata = NULL;
1299 if (psize) *psize = 0;
1301 return ERROR_INT(
"&data not defined", procName, 1);
1303 return ERROR_INT(
"&size not defined", procName, 1);
1305 return ERROR_INT(
"na not defined", procName, 1);
1308 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1309 return ERROR_INT(
"stream not opened", procName, 1);
1312 L_INFO(
"work-around: writing to a temp file\n", procName);
1315 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1317 if ((fp = tmpfile()) == NULL)
1318 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1344 PROCNAME(
"numaaCreate");
1347 n = INITIAL_PTR_ARRAYSIZE;
1349 if ((naa = (
NUMAA *)LEPT_CALLOC(1,
sizeof(
NUMAA))) == NULL)
1350 return (
NUMAA *)ERROR_PTR(
"naa not made", procName, NULL);
1351 if ((naa->
numa = (
NUMA **)LEPT_CALLOC(n,
sizeof(
NUMA *))) == NULL) {
1353 return (
NUMAA *)ERROR_PTR(
"numa ptr array not made", procName, NULL);
1387 for (i = 0; i < nptr; i++) {
1415 PROCNAME(
"numaaTruncate");
1418 return ERROR_INT(
"naa not defined", procName, 1);
1421 for (i = n - 1; i >= 0; i--) {
1449 PROCNAME(
"numaaDestroy");
1452 L_WARNING(
"ptr address is NULL!\n", procName);
1456 if ((naa = *pnaa) == NULL)
1459 for (i = 0; i < naa->
n; i++)
1461 LEPT_FREE(naa->
numa);
1489 PROCNAME(
"numaaAddNuma");
1492 return ERROR_INT(
"naa not defined", procName, 1);
1494 return ERROR_INT(
"na not defined", procName, 1);
1498 }
else if (copyflag ==
L_COPY) {
1500 return ERROR_INT(
"nac not made", procName, 1);
1501 }
else if (copyflag ==
L_CLONE) {
1504 return ERROR_INT(
"invalid copyflag", procName, 1);
1525 PROCNAME(
"numaaExtendArray");
1528 return ERROR_INT(
"naa not defined", procName, 1);
1533 return ERROR_INT(
"new ptr array not returned", procName, 1);
1552 PROCNAME(
"numaaGetCount");
1555 return ERROR_INT(
"naa not defined", procName, 0);
1571 PROCNAME(
"numaaGetNumaCount");
1574 return ERROR_INT(
"naa not defined", procName, 0);
1575 if (index < 0 || index >= naa->
n)
1576 return ERROR_INT(
"invalid index into naa", procName, 0);
1594 PROCNAME(
"numaaGetNumberCount");
1597 return ERROR_INT(
"naa not defined", procName, 0);
1600 for (sum = 0, i = 0; i < n; i++) {
1640 PROCNAME(
"numaaGetPtrArray");
1643 return (
NUMA **)ERROR_PTR(
"naa not defined", procName, NULL);
1663 PROCNAME(
"numaaGetNuma");
1666 return (
NUMA *)ERROR_PTR(
"naa not defined", procName, NULL);
1667 if (index < 0 || index >= naa->
n)
1668 return (
NUMA *)ERROR_PTR(
"index not valid", procName, NULL);
1670 if (accessflag ==
L_COPY)
1672 else if (accessflag ==
L_CLONE)
1675 return (
NUMA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1701 PROCNAME(
"numaaReplaceNuma");
1704 return ERROR_INT(
"naa not defined", procName, 1);
1706 return ERROR_INT(
"na not defined", procName, 1);
1708 if (index < 0 || index >= n)
1709 return ERROR_INT(
"index not valid", procName, 1);
1712 naa->
numa[index] = na;
1737 PROCNAME(
"numaaGetValue");
1739 if (!pfval && !pival)
1740 return ERROR_INT(
"no return val requested", procName, 1);
1741 if (pfval) *pfval = 0.0;
1742 if (pival) *pival = 0;
1744 return ERROR_INT(
"naa not defined", procName, 1);
1746 if (i < 0 || i >= n)
1747 return ERROR_INT(
"invalid index into naa", procName, 1);
1749 if (j < 0 || j >= na->
n)
1750 return ERROR_INT(
"invalid index into na", procName, 1);
1751 if (pfval) *pfval = na->
array[j];
1752 if (pival) *pival = (l_int32)(na->
array[j]);
1778 PROCNAME(
"numaaAddNumber");
1781 return ERROR_INT(
"naa not defined", procName, 1);
1783 if (index < 0 || index >= n)
1784 return ERROR_INT(
"invalid index in naa", procName, 1);
1808 PROCNAME(
"numaaRead");
1811 return (
NUMAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1814 return (
NUMAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1818 return (
NUMAA *)ERROR_PTR(
"naa not read", procName, NULL);
1832 l_int32 i, n, index, ret, version;
1836 PROCNAME(
"numaaReadStream");
1839 return (
NUMAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1841 ret = fscanf(fp,
"\nNumaa Version %d\n", &version);
1843 return (
NUMAA *)ERROR_PTR(
"not a numa file", procName, NULL);
1845 return (
NUMAA *)ERROR_PTR(
"invalid numaa version", procName, NULL);
1846 if (fscanf(fp,
"Number of numa = %d\n\n", &n) != 1)
1847 return (
NUMAA *)ERROR_PTR(
"invalid number of numa", procName, NULL);
1849 return (
NUMAA *)ERROR_PTR(
"naa not made", procName, NULL);
1851 for (i = 0; i < n; i++) {
1852 if (fscanf(fp,
"Numa[%d]:", &index) != 1) {
1854 return (
NUMAA *)ERROR_PTR(
"invalid numa header", procName, NULL);
1858 return (
NUMAA *)ERROR_PTR(
"na not made", procName, NULL);
1881 PROCNAME(
"numaaReadMem");
1884 return (
NUMAA *)ERROR_PTR(
"data not defined", procName, NULL);
1886 return (
NUMAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1890 if (!naa) L_ERROR(
"naa not read\n", procName);
1909 PROCNAME(
"numaaWrite");
1912 return ERROR_INT(
"filename not defined", procName, 1);
1914 return ERROR_INT(
"naa not defined", procName, 1);
1917 return ERROR_INT(
"stream not opened", procName, 1);
1921 return ERROR_INT(
"naa not written to stream", procName, 1);
1940 PROCNAME(
"numaaWriteStream");
1943 return ERROR_INT(
"stream not defined", procName, 1);
1945 return ERROR_INT(
"naa not defined", procName, 1);
1949 fprintf(fp,
"Number of numa = %d\n\n", n);
1950 for (i = 0; i < n; i++) {
1952 return ERROR_INT(
"na not found", procName, 1);
1953 fprintf(fp,
"Numa[%d]:", i);
1983 PROCNAME(
"numaaWriteMem");
1985 if (pdata) *pdata = NULL;
1986 if (psize) *psize = 0;
1988 return ERROR_INT(
"&data not defined", procName, 1);
1990 return ERROR_INT(
"&size not defined", procName, 1);
1992 return ERROR_INT(
"naa not defined", procName, 1);
1995 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1996 return ERROR_INT(
"stream not opened", procName, 1);
1999 L_INFO(
"work-around: writing to a temp file\n", procName);
2002 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2004 if ((fp = tmpfile()) == NULL)
2005 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
NUMAA * numaaReadMem(const l_uint8 *data, size_t size)
numaaReadMem()
NUMAA * numaaRead(const char *filename)
numaaRead()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
NUMAA * numaaReadStream(FILE *fp)
numaaReadStream()
NUMA * numaReadMem(const l_uint8 *data, size_t size)
numaReadMem()
NUMA ** numaaGetPtrArray(NUMAA *naa)
numaaGetPtrArray()
NUMA * numaRead(const char *filename)
numaRead()
l_ok numaInsertNumber(NUMA *na, l_int32 index, l_float32 val)
numaInsertNumber()
l_ok numaWriteDebug(const char *filename, NUMA *na)
numaWriteDebug()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
l_int32 numaaGetNumberCount(NUMAA *naa)
numaaGetNumberCount()
l_ok numaWriteMem(l_uint8 **pdata, size_t *psize, NUMA *na)
numaWriteMem()
l_ok numaCopyParameters(NUMA *nad, NUMA *nas)
numaCopyParameters()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
l_ok numaWriteStream(FILE *fp, NUMA *na)
numaWriteStream()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_ok numaSetCount(NUMA *na, l_int32 newcount)
numaSetCount()
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
l_ok numaSetValue(NUMA *na, l_int32 index, l_float32 val)
numaSetValue()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_ok numaaWriteStream(FILE *fp, NUMAA *naa)
numaaWriteStream()
l_int32 numaGetRefcount(NUMA *na)
numaGetRefCount()
l_int32 * numaGetIArray(NUMA *na)
numaGetIArray()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
l_ok numaWrite(const char *filename, NUMA *na)
numaWrite()
l_ok numaRemoveNumber(NUMA *na, l_int32 index)
numaRemoveNumber()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_ok numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
l_ok numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
l_ok numaEmpty(NUMA *na)
numaEmpty()
NUMA * numaCreateFromIArray(l_int32 *iarray, l_int32 size)
numaCreateFromIArray()
l_ok numaaTruncate(NUMAA *naa)
numaaTruncate()
l_ok numaChangeRefcount(NUMA *na, l_int32 delta)
numaChangeRefCount()
l_ok numaaReplaceNuma(NUMAA *naa, l_int32 index, NUMA *na)
numaaReplaceNuma()
l_ok numaShiftValue(NUMA *na, l_int32 index, l_float32 diff)
numaShiftValue()
l_ok numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val)
numaaAddNumber()
NUMA * numaCopy(NUMA *na)
numaCopy()
NUMA * numaCreateFromString(const char *str)
numaCreateFromString()
void numaDestroy(NUMA **pna)
numaDestroy()
#define NUMA_VERSION_NUMBER
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_ok numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival)
numaaGetValue()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
l_ok numaaWrite(const char *filename, NUMAA *naa)
numaaWrite()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
l_int32 numaaGetCount(NUMAA *naa)
numaaGetCount()
l_int32 numaaGetNumaCount(NUMAA *naa, l_int32 index)
numaaGetNumaCount()
static l_int32 numaExtendArray(NUMA *na)
numaExtendArray()
static l_int32 numaaExtendArray(NUMAA *naa)
numaaExtendArray()
l_ok numaReplaceNumber(NUMA *na, l_int32 index, l_float32 val)
numaReplaceNumber()
NUMA * numaClone(NUMA *na)
numaClone()
NUMAA * numaaCreateFull(l_int32 nptr, l_int32 n)
numaaCreateFull()
NUMA * numaCreateFromFArray(l_float32 *farray, l_int32 size, l_int32 copyflag)
numaCreateFromFArray()
SARRAY * numaConvertToSarray(NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type)
numaConvertToSarray()
l_ok numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag)
numaaAddNuma()
l_ok numaaWriteMem(l_uint8 **pdata, size_t *psize, NUMAA *naa)
numaaWriteMem()
NUMA * numaReadStream(FILE *fp)
numaReadStream()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()