166 #include <config_auto.h>
171 #include "allheaders.h"
175 static const l_uint32 MaxFloatArraySize = 100000000;
176 static const l_uint32 MaxPtrArraySize = 1000000;
197 if (n <= 0 || n > MaxFloatArraySize)
200 na = (
NUMA *)LEPT_CALLOC(1,
sizeof(
NUMA));
201 if ((na->
array = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32))) == NULL) {
203 return (
NUMA *)ERROR_PTR(
"number array not made", __func__, NULL);
238 return (
NUMA *)ERROR_PTR(
"iarray not defined", __func__, NULL);
240 return (
NUMA *)ERROR_PTR(
"size must be > 0", __func__, NULL);
243 for (i = 0; i < size; i++)
274 return (
NUMA *)ERROR_PTR(
"farray not defined", __func__, NULL);
276 return (
NUMA *)ERROR_PTR(
"size must be > 0", __func__, NULL);
278 return (
NUMA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
286 for (i = 0; i < size; i++)
311 l_int32 i, n, nerrors;
316 if (!str || (strlen(str) == 0))
317 return (
NUMA *)ERROR_PTR(
"str not defined or empty", __func__, NULL);
320 sarraySplitString(sa, str,
",");
324 for (i = 0; i < n; i++) {
326 if (sscanf(substr,
"%f", &val) != 1) {
327 L_ERROR(
"substr %d not float\n", __func__, i);
337 return (
NUMA *)ERROR_PTR(
"non-floats in string", __func__, NULL);
362 L_WARNING(
"ptr address is NULL\n", __func__);
366 if ((na = *pna) == NULL)
372 LEPT_FREE(na->
array);
393 return (
NUMA *)ERROR_PTR(
"na not defined", __func__, NULL);
396 return (
NUMA *)ERROR_PTR(
"cna not made", __func__, NULL);
400 for (i = 0; i < na->
n; i++)
417 return (
NUMA *)ERROR_PTR(
"na not defined", __func__, NULL);
441 return ERROR_INT(
"na not defined", __func__, 1);
466 return ERROR_INT(
"na not defined", __func__, 1);
471 return ERROR_INT(
"extension failed", __func__, 1);
493 size_t oldsize, newsize;
496 return ERROR_INT(
"na not defined", __func__, 1);
497 if (na->
nalloc > MaxFloatArraySize)
498 return ERROR_INT(
"na has too many ptrs", __func__, 1);
499 oldsize = na->
nalloc *
sizeof(l_float32);
500 newsize = 2 * oldsize;
501 if (newsize > 4 * MaxFloatArraySize)
502 return ERROR_INT(
"newsize > 400 MB; too large", __func__, 1);
505 oldsize, newsize)) == NULL)
506 return ERROR_INT(
"new ptr array not returned", __func__, 1);
538 return ERROR_INT(
"na not defined", __func__, 1);
540 if (index < 0 || index > n) {
541 L_ERROR(
"index %d not in [0,...,%d]\n", __func__, index, n);
547 return ERROR_INT(
"extension failed", __func__, 1);
549 for (i = n; i > index; i--)
551 na->
array[index] = val;
578 return ERROR_INT(
"na not defined", __func__, 1);
580 if (index < 0 || index >= n) {
581 L_ERROR(
"index %d not in [0,...,%d]\n", __func__, index, n - 1);
585 for (i = index + 1; i < n; i++)
608 return ERROR_INT(
"na not defined", __func__, 1);
610 if (index < 0 || index >= n) {
611 L_ERROR(
"index %d not in [0,...,%d]\n", __func__, index, n - 1);
615 na->
array[index] = val;
633 return ERROR_INT(
"na not defined", __func__, 0);
659 return ERROR_INT(
"na not defined", __func__, 1);
660 if (newcount > na->
nalloc) {
662 sizeof(l_float32) * na->
nalloc,
663 sizeof(l_float32) * newcount)) == NULL)
664 return ERROR_INT(
"new ptr array not returned", __func__, 1);
692 return ERROR_INT(
"&val not defined", __func__, 1);
695 return ERROR_INT(
"na not defined", __func__, 1);
697 if (index < 0 || index >= na->
n)
698 return ERROR_INT(
"index not valid", __func__, 1);
700 *pval = na->
array[index];
727 return ERROR_INT(
"&ival not defined", __func__, 1);
730 return ERROR_INT(
"na not defined", __func__, 1);
732 if (index < 0 || index >= na->
n)
733 return ERROR_INT(
"index not valid", __func__, 1);
735 val = na->
array[index];
736 *pival = (l_int32)(val + L_SIGN(val) * 0.5);
755 return ERROR_INT(
"na not defined", __func__, 1);
756 if (index < 0 || index >= na->
n)
757 return ERROR_INT(
"index not valid", __func__, 1);
759 na->
array[index] = val;
778 return ERROR_INT(
"na not defined", __func__, 1);
779 if (index < 0 || index >= na->
n)
780 return ERROR_INT(
"index not valid", __func__, 1);
782 na->
array[index] += diff;
813 return (l_int32 *)ERROR_PTR(
"na not defined", __func__, NULL);
816 if ((array = (l_int32 *)LEPT_CALLOC(n,
sizeof(l_int32))) == NULL)
817 return (l_int32 *)ERROR_PTR(
"array not made", __func__, NULL);
818 for (i = 0; i < n; i++) {
857 return (l_float32 *)ERROR_PTR(
"na not defined", __func__, NULL);
863 if ((array = (l_float32 *)LEPT_CALLOC(n,
sizeof(l_float32))) == NULL)
864 return (l_float32 *)ERROR_PTR(
"array not made", __func__, NULL);
865 for (i = 0; i < n; i++)
866 array[i] = na->
array[i];
886 if (!pdelx && !pstartx)
887 return ERROR_INT(
"no return val requested", __func__, 1);
888 if (pstartx) *pstartx = 0.0;
889 if (pdelx) *pdelx = 1.0;
891 return ERROR_INT(
"na not defined", __func__, 1);
893 if (pstartx) *pstartx = na->
startx;
894 if (pdelx) *pdelx = na->
delx;
915 return ERROR_INT(
"na not defined", __func__, 1);
934 l_float32 start, binsize;
937 return ERROR_INT(
"nas and nad not both defined", __func__, 1);
973 char fmt[32], strbuf[64];
979 return (
SARRAY *)ERROR_PTR(
"na not defined", __func__, NULL);
981 return (
SARRAY *)ERROR_PTR(
"invalid type", __func__, NULL);
985 snprintf(fmt,
sizeof(fmt),
"%%0%dd", size1);
987 snprintf(fmt,
sizeof(fmt),
"%%%dd", size1);
989 snprintf(fmt,
sizeof(fmt),
"%%%d.%df", size1, size2);
994 return (
SARRAY *)ERROR_PTR(
"sa not made", __func__, NULL);
996 for (i = 0; i < n; i++) {
999 snprintf(strbuf,
sizeof(strbuf), fmt, ival);
1002 snprintf(strbuf,
sizeof(strbuf), fmt, fval);
1027 return (
NUMA *)ERROR_PTR(
"filename not defined", __func__, NULL);
1030 return (
NUMA *)ERROR_PTR(
"stream not opened", __func__, NULL);
1034 return (
NUMA *)ERROR_PTR(
"na not read", __func__, NULL);
1048 l_int32 i, n, index, ret, version;
1049 l_float32 val, startx, delx;
1053 return (
NUMA *)ERROR_PTR(
"stream not defined", __func__, NULL);
1055 ret = fscanf(fp,
"\nNuma Version %d\n", &version);
1057 return (
NUMA *)ERROR_PTR(
"not a numa file", __func__, NULL);
1059 return (
NUMA *)ERROR_PTR(
"invalid numa version", __func__, NULL);
1060 if (fscanf(fp,
"Number of numbers = %d\n", &n) != 1)
1061 return (
NUMA *)ERROR_PTR(
"invalid number of numbers", __func__, NULL);
1063 if (n > MaxFloatArraySize) {
1064 L_ERROR(
"n = %d > %d\n", __func__, n, MaxFloatArraySize);
1068 return (
NUMA *)ERROR_PTR(
"na not made", __func__, NULL);
1070 for (i = 0; i < n; i++) {
1071 if (fscanf(fp,
" [%d] = %f\n", &index, &val) != 2) {
1073 return (
NUMA *)ERROR_PTR(
"bad input data", __func__, NULL);
1079 if (fscanf(fp,
"startx = %f, delx = %f\n", &startx, &delx) == 2)
1101 return (
NUMA *)ERROR_PTR(
"data not defined", __func__, NULL);
1103 return (
NUMA *)ERROR_PTR(
"stream not opened", __func__, NULL);
1107 if (!na) L_ERROR(
"numa not read\n", __func__);
1135 L_INFO(
"write to named temp file %s is disabled\n", __func__, filename);
1156 return ERROR_INT(
"filename not defined", __func__, 1);
1158 return ERROR_INT(
"na not defined", __func__, 1);
1161 return ERROR_INT(
"stream not opened", __func__, 1);
1165 return ERROR_INT(
"na not written to stream", __func__, 1);
1182 l_float32 startx, delx;
1185 return ERROR_INT(
"na not defined", __func__, 1);
1191 fprintf(fp,
"Number of numbers = %d\n", n);
1192 for (i = 0; i < n; i++)
1193 fprintf(fp,
" [%d] = %f\n", i, na->
array[i]);
1198 if (startx != 0.0 || delx != 1.0)
1199 fprintf(fp,
"startx = %f, delx = %f\n", startx, delx);
1215 l_float32 startx, delx;
1218 return ERROR_INT(
"na not defined", __func__, 1);
1223 for (i = 0; i < n; i++)
1229 if (startx != 0.0 || delx != 1.0)
1230 lept_stderr(
"startx = %f, delx = %f\n", startx, delx);
1257 if (pdata) *pdata = NULL;
1258 if (psize) *psize = 0;
1260 return ERROR_INT(
"&data not defined", __func__, 1);
1262 return ERROR_INT(
"&size not defined", __func__, 1);
1264 return ERROR_INT(
"na not defined", __func__, 1);
1267 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1268 return ERROR_INT(
"stream not opened", __func__, 1);
1272 *psize = *psize - 1;
1274 L_INFO(
"work-around: writing to a temp file\n", __func__);
1277 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
1279 if ((fp = tmpfile()) == NULL)
1280 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
1306 if (n <= 0 || n > MaxPtrArraySize)
1309 naa = (
NUMAA *)LEPT_CALLOC(1,
sizeof(
NUMAA));
1310 if ((naa->
numa = (
NUMA **)LEPT_CALLOC(n,
sizeof(
NUMA *))) == NULL) {
1312 return (
NUMAA *)ERROR_PTR(
"numa ptr array not made", __func__, NULL);
1346 for (i = 0; i < nptr; i++) {
1375 return ERROR_INT(
"naa not defined", __func__, 1);
1378 for (i = n - 1; i >= 0; i--) {
1407 L_WARNING(
"ptr address is NULL!\n", __func__);
1411 if ((naa = *pnaa) == NULL)
1414 for (i = 0; i < naa->
n; i++)
1416 LEPT_FREE(naa->
numa);
1443 return ERROR_INT(
"naa not defined", __func__, 1);
1445 return ERROR_INT(
"na not defined", __func__, 1);
1449 }
else if (copyflag ==
L_COPY) {
1451 return ERROR_INT(
"nac not made", __func__, 1);
1452 }
else if (copyflag ==
L_CLONE) {
1455 return ERROR_INT(
"invalid copyflag", __func__, 1);
1463 return ERROR_INT(
"extension failed", __func__, 1);
1486 size_t oldsize, newsize;
1489 return ERROR_INT(
"naa not defined", __func__, 1);
1490 if (naa->
nalloc > MaxPtrArraySize)
1491 return ERROR_INT(
"naa has too many ptrs", __func__, 1);
1493 newsize = 2 * oldsize;
1494 if (newsize > 8 * MaxPtrArraySize)
1495 return ERROR_INT(
"newsize > 8 MB; too large", __func__, 1);
1498 oldsize, newsize)) == NULL)
1499 return ERROR_INT(
"new ptr array not returned", __func__, 1);
1519 return ERROR_INT(
"naa not defined", __func__, 0);
1536 return ERROR_INT(
"naa not defined", __func__, 0);
1537 if (index < 0 || index >= naa->
n)
1538 return ERROR_INT(
"invalid index into naa", __func__, 0);
1557 return ERROR_INT(
"naa not defined", __func__, 0);
1560 for (sum = 0, i = 0; i < n; i++) {
1601 return (
NUMA **)ERROR_PTR(
"naa not defined", __func__, NULL);
1622 return (
NUMA *)ERROR_PTR(
"naa not defined", __func__, NULL);
1623 if (index < 0 || index >= naa->
n)
1624 return (
NUMA *)ERROR_PTR(
"index not valid", __func__, NULL);
1626 if (accessflag ==
L_COPY)
1628 else if (accessflag ==
L_CLONE)
1631 return (
NUMA *)ERROR_PTR(
"invalid accessflag", __func__, NULL);
1658 return ERROR_INT(
"naa not defined", __func__, 1);
1660 return ERROR_INT(
"na not defined", __func__, 1);
1662 if (index < 0 || index >= n)
1663 return ERROR_INT(
"index not valid", __func__, 1);
1666 naa->
numa[index] = na;
1691 if (!pfval && !pival)
1692 return ERROR_INT(
"no return val requested", __func__, 1);
1693 if (pfval) *pfval = 0.0;
1694 if (pival) *pival = 0;
1696 return ERROR_INT(
"naa not defined", __func__, 1);
1698 if (i < 0 || i >= n)
1699 return ERROR_INT(
"invalid index into naa", __func__, 1);
1701 if (j < 0 || j >= na->
n)
1702 return ERROR_INT(
"invalid index into na", __func__, 1);
1703 if (pfval) *pfval = na->
array[j];
1704 if (pival) *pival = (l_int32)(na->
array[j]);
1731 return ERROR_INT(
"naa not defined", __func__, 1);
1733 if (index < 0 || index >= n)
1734 return ERROR_INT(
"invalid index in naa", __func__, 1);
1759 return (
NUMAA *)ERROR_PTR(
"filename not defined", __func__, NULL);
1762 return (
NUMAA *)ERROR_PTR(
"stream not opened", __func__, NULL);
1766 return (
NUMAA *)ERROR_PTR(
"naa not read", __func__, NULL);
1780 l_int32 i, n, index, ret, version;
1785 return (
NUMAA *)ERROR_PTR(
"stream not defined", __func__, NULL);
1787 ret = fscanf(fp,
"\nNumaa Version %d\n", &version);
1789 return (
NUMAA *)ERROR_PTR(
"not a numa file", __func__, NULL);
1791 return (
NUMAA *)ERROR_PTR(
"invalid numaa version", __func__, NULL);
1792 if (fscanf(fp,
"Number of numa = %d\n\n", &n) != 1)
1793 return (
NUMAA *)ERROR_PTR(
"invalid number of numa", __func__, NULL);
1795 if (n > MaxPtrArraySize) {
1796 L_ERROR(
"n = %d > %d\n", __func__, n, MaxPtrArraySize);
1800 return (
NUMAA *)ERROR_PTR(
"naa not made", __func__, NULL);
1802 for (i = 0; i < n; i++) {
1803 if (fscanf(fp,
"Numa[%d]:", &index) != 1) {
1805 return (
NUMAA *)ERROR_PTR(
"invalid numa header", __func__, NULL);
1809 return (
NUMAA *)ERROR_PTR(
"na not made", __func__, NULL);
1833 return (
NUMAA *)ERROR_PTR(
"data not defined", __func__, NULL);
1835 return (
NUMAA *)ERROR_PTR(
"stream not opened", __func__, NULL);
1839 if (!naa) L_ERROR(
"naa not read\n", __func__);
1859 return ERROR_INT(
"filename not defined", __func__, 1);
1861 return ERROR_INT(
"naa not defined", __func__, 1);
1864 return ERROR_INT(
"stream not opened", __func__, 1);
1868 return ERROR_INT(
"naa not written to stream", __func__, 1);
1888 return ERROR_INT(
"stream not defined", __func__, 1);
1890 return ERROR_INT(
"naa not defined", __func__, 1);
1894 fprintf(fp,
"Number of numa = %d\n\n", n);
1895 for (i = 0; i < n; i++) {
1897 return ERROR_INT(
"na not found", __func__, 1);
1898 fprintf(fp,
"Numa[%d]:", i);
1928 if (pdata) *pdata = NULL;
1929 if (psize) *psize = 0;
1931 return ERROR_INT(
"&data not defined", __func__, 1);
1933 return ERROR_INT(
"&size not defined", __func__, 1);
1935 return ERROR_INT(
"naa not defined", __func__, 1);
1938 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1939 return ERROR_INT(
"stream not opened", __func__, 1);
1943 *psize = *psize - 1;
1945 L_INFO(
"work-around: writing to a temp file\n", __func__);
1948 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
1950 if ((fp = tmpfile()) == NULL)
1951 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
#define NUMA_VERSION_NUMBER
SARRAY * numaConvertToSarray(NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type)
numaConvertToSarray()
NUMA * numaReadMem(const l_uint8 *data, size_t size)
numaReadMem()
NUMAA * numaaRead(const char *filename)
numaaRead()
l_ok numaaWriteMem(l_uint8 **pdata, size_t *psize, NUMAA *naa)
numaaWriteMem()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
NUMA * numaReadStream(FILE *fp)
numaReadStream()
l_int32 numaaGetNumberCount(NUMAA *naa)
numaaGetNumberCount()
NUMAA * numaaReadMem(const l_uint8 *data, size_t size)
numaaReadMem()
l_ok numaReplaceNumber(NUMA *na, l_int32 index, l_float32 val)
numaReplaceNumber()
NUMA * numaCreateFromString(const char *str)
numaCreateFromString()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_ok numaWriteStderr(NUMA *na)
numaWriteStderr()
NUMA ** numaaGetPtrArray(NUMAA *naa)
numaaGetPtrArray()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_ok numaWrite(const char *filename, NUMA *na)
numaWrite()
l_int32 numaaGetCount(NUMAA *naa)
numaaGetCount()
l_ok numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val)
numaaAddNumber()
l_ok numaInsertNumber(NUMA *na, l_int32 index, l_float32 val)
numaInsertNumber()
NUMAA * numaaCreateFull(l_int32 nptr, l_int32 n)
numaaCreateFull()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
l_ok numaaWriteStream(FILE *fp, NUMAA *naa)
numaaWriteStream()
l_int32 numaaGetNumaCount(NUMAA *naa, l_int32 index)
numaaGetNumaCount()
NUMA * numaRead(const char *filename)
numaRead()
l_ok numaSetCount(NUMA *na, l_int32 newcount)
numaSetCount()
NUMA * numaClone(NUMA *na)
numaClone()
l_ok numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival)
numaaGetValue()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok numaaTruncate(NUMAA *naa)
numaaTruncate()
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
l_ok numaSetValue(NUMA *na, l_int32 index, l_float32 val)
numaSetValue()
l_ok numaEmpty(NUMA *na)
numaEmpty()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok numaRemoveNumber(NUMA *na, l_int32 index)
numaRemoveNumber()
l_ok numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag)
numaaAddNuma()
l_ok numaaWrite(const char *filename, NUMAA *naa)
numaaWrite()
NUMA * numaCreateFromFArray(l_float32 *farray, l_int32 size, l_int32 copyflag)
numaCreateFromFArray()
l_ok numaWriteDebug(const char *filename, NUMA *na)
numaWriteDebug()
static const l_int32 InitialArraySize
l_ok numaShiftValue(NUMA *na, l_int32 index, l_float32 diff)
numaShiftValue()
NUMAA * numaaReadStream(FILE *fp)
numaaReadStream()
NUMA * numaCopy(NUMA *na)
numaCopy()
static l_int32 numaExtendArray(NUMA *na)
numaExtendArray()
l_ok numaWriteMem(l_uint8 **pdata, size_t *psize, NUMA *na)
numaWriteMem()
l_int32 * numaGetIArray(NUMA *na)
numaGetIArray()
l_ok numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
NUMA * numaCreateFromIArray(l_int32 *iarray, l_int32 size)
numaCreateFromIArray()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_ok numaCopyParameters(NUMA *nad, NUMA *nas)
numaCopyParameters()
l_ok numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
l_ok numaaReplaceNuma(NUMAA *naa, l_int32 index, NUMA *na)
numaaReplaceNuma()
l_ok numaWriteStream(FILE *fp, NUMA *na)
numaWriteStream()
static l_int32 numaaExtendArray(NUMAA *naa)
numaaExtendArray()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
void * reallocNew(void **pindata, size_t oldsize, size_t newsize)
reallocNew()
FILE * fopenWriteWinTempfile(void)
fopenWriteWinTempfile()
FILE * fopenReadStream(const char *filename)
fopenReadStream()