167 #include "allheaders.h" 169 static const l_int32 INITIAL_PTR_ARRAYSIZE = 50;
190 PROCNAME(
"numaCreate");
193 n = INITIAL_PTR_ARRAYSIZE;
195 if ((na = (
NUMA *)LEPT_CALLOC(1,
sizeof(
NUMA))) == NULL)
196 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
197 if ((na->
array = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32))) == NULL) {
199 return (
NUMA *)ERROR_PTR(
"number array not made", procName, NULL);
233 PROCNAME(
"numaCreateFromIArray");
236 return (
NUMA *)ERROR_PTR(
"iarray not defined", procName, NULL);
238 return (
NUMA *)ERROR_PTR(
"size must be > 0", procName, NULL);
241 for (i = 0; i < size; i++)
271 PROCNAME(
"numaCreateFromFArray");
274 return (
NUMA *)ERROR_PTR(
"farray not defined", procName, NULL);
276 return (
NUMA *)ERROR_PTR(
"size must be > 0", procName, NULL);
278 return (
NUMA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
286 for (i = 0; i < size; i++)
311 l_int32 i, n, nerrors;
316 PROCNAME(
"numaCreateFromString");
318 if (!str || (strlen(str) == 0))
319 return (
NUMA *)ERROR_PTR(
"str not defined or empty", procName, NULL);
322 sarraySplitString(sa, str,
",");
326 for (i = 0; i < n; i++) {
328 if (sscanf(substr,
"%f", &val) != 1) {
329 L_ERROR(
"substr %d not float\n", procName, i);
339 return (
NUMA *)ERROR_PTR(
"non-floats in string", procName, NULL);
363 PROCNAME(
"numaDestroy");
366 L_WARNING(
"ptr address is NULL\n", procName);
370 if ((na = *pna) == NULL)
377 LEPT_FREE(na->
array);
398 PROCNAME(
"numaCopy");
401 return (
NUMA *)ERROR_PTR(
"na not defined", procName, NULL);
404 return (
NUMA *)ERROR_PTR(
"cna not made", procName, NULL);
408 for (i = 0; i < na->
n; i++)
424 PROCNAME(
"numaClone");
427 return (
NUMA *)ERROR_PTR(
"na not defined", procName, NULL);
450 PROCNAME(
"numaEmpty");
453 return ERROR_INT(
"na not defined", procName, 1);
477 PROCNAME(
"numaAddNumber");
480 return ERROR_INT(
"na not defined", procName, 1);
500 PROCNAME(
"numaExtendArray");
503 return ERROR_INT(
"na not defined", procName, 1);
506 sizeof(l_float32) * na->
nalloc,
507 2 *
sizeof(l_float32) * na->
nalloc)) == NULL)
508 return ERROR_INT(
"new ptr array not returned", procName, 1);
539 PROCNAME(
"numaInsertNumber");
542 return ERROR_INT(
"na not defined", procName, 1);
544 if (index < 0 || index > n)
545 return ERROR_INT(
"index not in {0...n}", procName, 1);
549 for (i = n; i > index; i--)
551 na->
array[index] = val;
577 PROCNAME(
"numaRemoveNumber");
580 return ERROR_INT(
"na not defined", procName, 1);
582 if (index < 0 || index >= n)
583 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
585 for (i = index + 1; i < n; i++)
607 PROCNAME(
"numaReplaceNumber");
610 return ERROR_INT(
"na not defined", procName, 1);
612 if (index < 0 || index >= n)
613 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
615 na->
array[index] = val;
632 PROCNAME(
"numaGetCount");
635 return ERROR_INT(
"na not defined", procName, 0);
660 PROCNAME(
"numaSetCount");
663 return ERROR_INT(
"na not defined", procName, 1);
664 if (newcount > na->
nalloc) {
666 sizeof(l_float32) * na->
nalloc,
667 sizeof(l_float32) * newcount)) == NULL)
668 return ERROR_INT(
"new ptr array not returned", procName, 1);
695 PROCNAME(
"numaGetFValue");
698 return ERROR_INT(
"&val not defined", procName, 1);
701 return ERROR_INT(
"na not defined", procName, 1);
703 if (index < 0 || index >= na->
n)
704 return ERROR_INT(
"index not valid", procName, 1);
706 *pval = na->
array[index];
732 PROCNAME(
"numaGetIValue");
735 return ERROR_INT(
"&ival not defined", procName, 1);
738 return ERROR_INT(
"na not defined", procName, 1);
740 if (index < 0 || index >= na->
n)
741 return ERROR_INT(
"index not valid", procName, 1);
743 val = na->
array[index];
744 *pival = (l_int32)(val + L_SIGN(val) * 0.5);
762 PROCNAME(
"numaSetValue");
765 return ERROR_INT(
"na not defined", procName, 1);
766 if (index < 0 || index >= na->
n)
767 return ERROR_INT(
"index not valid", procName, 1);
769 na->
array[index] = val;
787 PROCNAME(
"numaShiftValue");
790 return ERROR_INT(
"na not defined", procName, 1);
791 if (index < 0 || index >= na->
n)
792 return ERROR_INT(
"index not valid", procName, 1);
794 na->
array[index] += diff;
824 PROCNAME(
"numaGetIArray");
827 return (l_int32 *)ERROR_PTR(
"na not defined", procName, NULL);
830 if ((array = (l_int32 *)LEPT_CALLOC(n,
sizeof(l_int32))) == NULL)
831 return (l_int32 *)ERROR_PTR(
"array not made", procName, NULL);
832 for (i = 0; i < n; i++) {
870 PROCNAME(
"numaGetFArray");
873 return (l_float32 *)ERROR_PTR(
"na not defined", procName, NULL);
879 if ((array = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32))) == NULL)
880 return (l_float32 *)ERROR_PTR(
"array not made", procName, NULL);
881 for (i = 0; i < n; i++)
882 array[i] = na->
array[i];
898 PROCNAME(
"numaGetRefcount");
901 return ERROR_INT(
"na not defined", procName, UNDEF);
917 PROCNAME(
"numaChangeRefcount");
920 return ERROR_INT(
"na not defined", procName, 1);
939 PROCNAME(
"numaGetParameters");
941 if (!pdelx && !pstartx)
942 return ERROR_INT(
"no return val requested", procName, 1);
943 if (pstartx) *pstartx = 0.0;
944 if (pdelx) *pdelx = 1.0;
946 return ERROR_INT(
"na not defined", procName, 1);
948 if (pstartx) *pstartx = na->
startx;
949 if (pdelx) *pdelx = na->
delx;
969 PROCNAME(
"numaSetParameters");
972 return ERROR_INT(
"na not defined", procName, 1);
991 l_float32 start, binsize;
993 PROCNAME(
"numaCopyParameters");
996 return ERROR_INT(
"nas and nad not both defined", procName, 1);
1032 char fmt[32], strbuf[64];
1037 PROCNAME(
"numaConvertToSarray");
1040 return (
SARRAY *)ERROR_PTR(
"na not defined", procName, NULL);
1042 return (
SARRAY *)ERROR_PTR(
"invalid type", procName, NULL);
1046 snprintf(fmt,
sizeof(fmt),
"%%0%dd", size1);
1048 snprintf(fmt,
sizeof(fmt),
"%%%dd", size1);
1050 snprintf(fmt,
sizeof(fmt),
"%%%d.%df", size1, size2);
1055 return (
SARRAY *)ERROR_PTR(
"sa not made", procName, NULL);
1057 for (i = 0; i < n; i++) {
1060 snprintf(strbuf,
sizeof(strbuf), fmt, ival);
1063 snprintf(strbuf,
sizeof(strbuf), fmt, fval);
1087 PROCNAME(
"numaRead");
1090 return (
NUMA *)ERROR_PTR(
"filename not defined", procName, NULL);
1093 return (
NUMA *)ERROR_PTR(
"stream not opened", procName, NULL);
1097 return (
NUMA *)ERROR_PTR(
"na not read", procName, NULL);
1111 l_int32 i, n, index, ret, version;
1112 l_float32 val, startx, delx;
1115 PROCNAME(
"numaReadStream");
1118 return (
NUMA *)ERROR_PTR(
"stream not defined", procName, NULL);
1120 ret = fscanf(fp,
"\nNuma Version %d\n", &version);
1122 return (
NUMA *)ERROR_PTR(
"not a numa file", procName, NULL);
1124 return (
NUMA *)ERROR_PTR(
"invalid numa version", procName, NULL);
1125 if (fscanf(fp,
"Number of numbers = %d\n", &n) != 1)
1126 return (
NUMA *)ERROR_PTR(
"invalid number of numbers", procName, NULL);
1129 return (
NUMA *)ERROR_PTR(
"na not made", procName, NULL);
1131 for (i = 0; i < n; i++) {
1132 if (fscanf(fp,
" [%d] = %f\n", &index, &val) != 2) {
1134 return (
NUMA *)ERROR_PTR(
"bad input data", procName, NULL);
1140 if (fscanf(fp,
"startx = %f, delx = %f\n", &startx, &delx) == 2)
1161 PROCNAME(
"numaReadMem");
1164 return (
NUMA *)ERROR_PTR(
"data not defined", procName, NULL);
1166 return (
NUMA *)ERROR_PTR(
"stream not opened", procName, NULL);
1170 if (!na) L_ERROR(
"numa not read\n", procName);
1188 PROCNAME(
"numaWrite");
1191 return ERROR_INT(
"filename not defined", procName, 1);
1193 return ERROR_INT(
"na not defined", procName, 1);
1196 return ERROR_INT(
"stream not opened", procName, 1);
1200 return ERROR_INT(
"na not written to stream", procName, 1);
1217 l_float32 startx, delx;
1219 PROCNAME(
"numaWriteStream");
1222 return ERROR_INT(
"stream not defined", procName, 1);
1224 return ERROR_INT(
"na not defined", procName, 1);
1228 fprintf(fp,
"Number of numbers = %d\n", n);
1229 for (i = 0; i < n; i++)
1230 fprintf(fp,
" [%d] = %f\n", i, na->
array[i]);
1235 if (startx != 0.0 || delx != 1.0)
1236 fprintf(fp,
"startx = %f, delx = %f\n", startx, delx);
1263 PROCNAME(
"numaWriteMem");
1265 if (pdata) *pdata = NULL;
1266 if (psize) *psize = 0;
1268 return ERROR_INT(
"&data not defined", procName, 1);
1270 return ERROR_INT(
"&size not defined", procName, 1);
1272 return ERROR_INT(
"na not defined", procName, 1);
1275 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1276 return ERROR_INT(
"stream not opened", procName, 1);
1279 L_INFO(
"work-around: writing to a temp file\n", procName);
1282 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1284 if ((fp = tmpfile()) == NULL)
1285 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1311 PROCNAME(
"numaaCreate");
1314 n = INITIAL_PTR_ARRAYSIZE;
1316 if ((naa = (
NUMAA *)LEPT_CALLOC(1,
sizeof(
NUMAA))) == NULL)
1317 return (
NUMAA *)ERROR_PTR(
"naa not made", procName, NULL);
1318 if ((naa->
numa = (
NUMA **)LEPT_CALLOC(n,
sizeof(
NUMA *))) == NULL) {
1320 return (
NUMAA *)ERROR_PTR(
"numa ptr array not made", procName, NULL);
1353 for (i = 0; i < nptr; i++) {
1381 PROCNAME(
"numaaTruncate");
1384 return ERROR_INT(
"naa not defined", procName, 1);
1387 for (i = n - 1; i >= 0; i--) {
1415 PROCNAME(
"numaaDestroy");
1418 L_WARNING(
"ptr address is NULL!\n", procName);
1422 if ((naa = *pnaa) == NULL)
1425 for (i = 0; i < naa->
n; i++)
1427 LEPT_FREE(naa->
numa);
1455 PROCNAME(
"numaaAddNuma");
1458 return ERROR_INT(
"naa not defined", procName, 1);
1460 return ERROR_INT(
"na not defined", procName, 1);
1464 }
else if (copyflag ==
L_COPY) {
1466 return ERROR_INT(
"nac not made", procName, 1);
1467 }
else if (copyflag ==
L_CLONE) {
1470 return ERROR_INT(
"invalid copyflag", procName, 1);
1491 PROCNAME(
"numaaExtendArray");
1494 return ERROR_INT(
"naa not defined", procName, 1);
1499 return ERROR_INT(
"new ptr array not returned", procName, 1);
1518 PROCNAME(
"numaaGetCount");
1521 return ERROR_INT(
"naa not defined", procName, 0);
1537 PROCNAME(
"numaaGetNumaCount");
1540 return ERROR_INT(
"naa not defined", procName, 0);
1541 if (index < 0 || index >= naa->
n)
1542 return ERROR_INT(
"invalid index into naa", procName, 0);
1560 PROCNAME(
"numaaGetNumberCount");
1563 return ERROR_INT(
"naa not defined", procName, 0);
1566 for (sum = 0, i = 0; i < n; i++) {
1606 PROCNAME(
"numaaGetPtrArray");
1609 return (
NUMA **)ERROR_PTR(
"naa not defined", procName, NULL);
1629 PROCNAME(
"numaaGetNuma");
1632 return (
NUMA *)ERROR_PTR(
"naa not defined", procName, NULL);
1633 if (index < 0 || index >= naa->
n)
1634 return (
NUMA *)ERROR_PTR(
"index not valid", procName, NULL);
1636 if (accessflag ==
L_COPY)
1638 else if (accessflag ==
L_CLONE)
1641 return (
NUMA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1667 PROCNAME(
"numaaReplaceNuma");
1670 return ERROR_INT(
"naa not defined", procName, 1);
1672 return ERROR_INT(
"na not defined", procName, 1);
1674 if (index < 0 || index >= n)
1675 return ERROR_INT(
"index not valid", procName, 1);
1678 naa->
numa[index] = na;
1703 PROCNAME(
"numaaGetValue");
1705 if (!pfval && !pival)
1706 return ERROR_INT(
"no return val requested", procName, 1);
1707 if (pfval) *pfval = 0.0;
1708 if (pival) *pival = 0;
1710 return ERROR_INT(
"naa not defined", procName, 1);
1712 if (i < 0 || i >= n)
1713 return ERROR_INT(
"invalid index into naa", procName, 1);
1715 if (j < 0 || j >= na->
n)
1716 return ERROR_INT(
"invalid index into na", procName, 1);
1717 if (pfval) *pfval = na->
array[j];
1718 if (pival) *pival = (l_int32)(na->
array[j]);
1744 PROCNAME(
"numaaAddNumber");
1747 return ERROR_INT(
"naa not defined", procName, 1);
1749 if (index < 0 || index >= n)
1750 return ERROR_INT(
"invalid index in naa", procName, 1);
1774 PROCNAME(
"numaaRead");
1777 return (
NUMAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1780 return (
NUMAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1784 return (
NUMAA *)ERROR_PTR(
"naa not read", procName, NULL);
1798 l_int32 i, n, index, ret, version;
1802 PROCNAME(
"numaaReadStream");
1805 return (
NUMAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1807 ret = fscanf(fp,
"\nNumaa Version %d\n", &version);
1809 return (
NUMAA *)ERROR_PTR(
"not a numa file", procName, NULL);
1811 return (
NUMAA *)ERROR_PTR(
"invalid numaa version", procName, NULL);
1812 if (fscanf(fp,
"Number of numa = %d\n\n", &n) != 1)
1813 return (
NUMAA *)ERROR_PTR(
"invalid number of numa", procName, NULL);
1815 return (
NUMAA *)ERROR_PTR(
"naa not made", procName, NULL);
1817 for (i = 0; i < n; i++) {
1818 if (fscanf(fp,
"Numa[%d]:", &index) != 1) {
1820 return (
NUMAA *)ERROR_PTR(
"invalid numa header", procName, NULL);
1824 return (
NUMAA *)ERROR_PTR(
"na not made", procName, NULL);
1847 PROCNAME(
"numaaReadMem");
1850 return (
NUMAA *)ERROR_PTR(
"data not defined", procName, NULL);
1852 return (
NUMAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1856 if (!naa) L_ERROR(
"naa not read\n", procName);
1874 PROCNAME(
"numaaWrite");
1877 return ERROR_INT(
"filename not defined", procName, 1);
1879 return ERROR_INT(
"naa not defined", procName, 1);
1882 return ERROR_INT(
"stream not opened", procName, 1);
1886 return ERROR_INT(
"naa not written to stream", procName, 1);
1905 PROCNAME(
"numaaWriteStream");
1908 return ERROR_INT(
"stream not defined", procName, 1);
1910 return ERROR_INT(
"naa not defined", procName, 1);
1914 fprintf(fp,
"Number of numa = %d\n\n", n);
1915 for (i = 0; i < n; i++) {
1917 return ERROR_INT(
"na not found", procName, 1);
1918 fprintf(fp,
"Numa[%d]:", i);
1948 PROCNAME(
"numaaWriteMem");
1950 if (pdata) *pdata = NULL;
1951 if (psize) *psize = 0;
1953 return ERROR_INT(
"&data not defined", procName, 1);
1955 return ERROR_INT(
"&size not defined", procName, 1);
1957 return ERROR_INT(
"naa not defined", procName, 1);
1960 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1961 return ERROR_INT(
"stream not opened", procName, 1);
1964 L_INFO(
"work-around: writing to a temp file\n", procName);
1967 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1969 if ((fp = tmpfile()) == NULL)
1970 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
l_int32 numaaReplaceNuma(NUMAA *naa, l_int32 index, NUMA *na)
numaaReplaceNuma()
NUMAA * numaaReadMem(const l_uint8 *data, size_t size)
numaaReadMem()
NUMAA * numaaRead(const char *filename)
numaaRead()
l_int32 numaaWriteMem(l_uint8 **pdata, size_t *psize, NUMAA *naa)
numaaWriteMem()
l_int32 numaShiftValue(NUMA *na, l_int32 index, l_float32 diff)
numaShiftValue()
l_int32 numaSetCount(NUMA *na, l_int32 newcount)
numaSetCount()
NUMAA * numaaReadStream(FILE *fp)
numaaReadStream()
NUMA * numaReadMem(const l_uint8 *data, size_t size)
numaReadMem()
l_int32 numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
NUMA ** numaaGetPtrArray(NUMAA *naa)
numaaGetPtrArray()
NUMA * numaRead(const char *filename)
numaRead()
l_int32 numaaWriteStream(FILE *fp, NUMAA *naa)
numaaWriteStream()
l_int32 numaaGetNumberCount(NUMAA *naa)
numaaGetNumberCount()
l_int32 numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
l_int32 numaInsertNumber(NUMA *na, l_int32 index, l_float32 val)
numaInsertNumber()
l_int32 numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val)
numaaAddNumber()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_int32 numaRemoveNumber(NUMA *na, l_int32 index)
numaRemoveNumber()
l_int32 numaWriteMem(l_uint8 **pdata, size_t *psize, NUMA *na)
numaWriteMem()
l_int32 numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag)
numaaAddNuma()
l_int32 numaGetRefcount(NUMA *na)
numaGetRefCount()
l_int32 * numaGetIArray(NUMA *na)
numaGetIArray()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
static const l_int32 L_INSERT
l_int32 numaGetCount(NUMA *na)
numaGetCount()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_int32 sarrayAddString(SARRAY *sa, char *string, l_int32 copyflag)
sarrayAddString()
NUMA * numaCreateFromIArray(l_int32 *iarray, l_int32 size)
numaCreateFromIArray()
l_int32 numaEmpty(NUMA *na)
numaEmpty()
l_int32 numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
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()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 numaCopyParameters(NUMA *nad, NUMA *nas)
numaCopyParameters()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
l_int32 numaReplaceNumber(NUMA *na, l_int32 index, l_float32 val)
numaReplaceNumber()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
l_int32 numaWrite(const char *filename, NUMA *na)
numaWrite()
l_int32 numaaGetCount(NUMAA *naa)
numaaGetCount()
l_int32 numaaTruncate(NUMAA *naa)
numaaTruncate()
l_int32 numaaGetNumaCount(NUMAA *naa, l_int32 index)
numaaGetNumaCount()
static l_int32 numaExtendArray(NUMA *na)
numaExtendArray()
l_int32 numaSetValue(NUMA *na, l_int32 index, l_float32 val)
numaSetValue()
l_int32 numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival)
numaaGetValue()
l_int32 numaaWrite(const char *filename, NUMAA *naa)
numaaWrite()
static l_int32 numaaExtendArray(NUMAA *naa)
numaaExtendArray()
NUMA * numaClone(NUMA *na)
numaClone()
NUMAA * numaaCreateFull(l_int32 nptr, l_int32 n)
numaaCreateFull()
l_int32 numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
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_int32 numaChangeRefcount(NUMA *na, l_int32 delta)
numaChangeRefCount()
NUMA * numaReadStream(FILE *fp)
numaReadStream()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
l_int32 numaWriteStream(FILE *fp, NUMA *na)
numaWriteStream()