150 #include "allheaders.h" 173 PROCNAME(
"l_dnaCreate");
179 if ((da->
array = (l_float64 *)LEPT_CALLOC(n,
sizeof(l_float64))) == NULL) {
181 return (
L_DNA *)ERROR_PTR(
"double array not made", procName, NULL);
216 PROCNAME(
"l_dnaCreateFromIArray");
219 return (
L_DNA *)ERROR_PTR(
"iarray not defined", procName, NULL);
221 return (
L_DNA *)ERROR_PTR(
"size must be > 0", procName, NULL);
224 for (i = 0; i < size; i++)
254 PROCNAME(
"l_dnaCreateFromDArray");
257 return (
L_DNA *)ERROR_PTR(
"darray not defined", procName, NULL);
259 return (
L_DNA *)ERROR_PTR(
"size must be > 0", procName, NULL);
261 return (
L_DNA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
269 for (i = 0; i < size; i++)
294 PROCNAME(
"l_dnaMakeSequence");
297 return (
L_DNA *)ERROR_PTR(
"da not made", procName, NULL);
299 for (i = 0; i < size; i++) {
300 val = startval + i * increment;
325 PROCNAME(
"l_dnaDestroy");
328 L_WARNING(
"ptr address is NULL\n", procName);
332 if ((da = *pda) == NULL)
339 LEPT_FREE(da->
array);
365 PROCNAME(
"l_dnaCopy");
368 return (
L_DNA *)ERROR_PTR(
"da not defined", procName, NULL);
371 return (
L_DNA *)ERROR_PTR(
"dac not made", procName, NULL);
375 for (i = 0; i < da->
n; i++)
391 PROCNAME(
"l_dnaClone");
394 return (
L_DNA *)ERROR_PTR(
"da not defined", procName, NULL);
417 PROCNAME(
"l_dnaEmpty");
420 return ERROR_INT(
"da not defined", procName, 1);
444 PROCNAME(
"l_dnaAddNumber");
447 return ERROR_INT(
"da not defined", procName, 1);
467 PROCNAME(
"l_dnaExtendArray");
470 return ERROR_INT(
"da not defined", procName, 1);
473 sizeof(l_float64) * da->
nalloc,
474 2 *
sizeof(l_float64) * da->
nalloc)) == NULL)
475 return ERROR_INT(
"new ptr array not returned", procName, 1);
506 PROCNAME(
"l_dnaInsertNumber");
509 return ERROR_INT(
"da not defined", procName, 1);
511 if (index < 0 || index > n)
512 return ERROR_INT(
"index not in {0...n}", procName, 1);
516 for (i = n; i > index; i--)
518 da->
array[index] = val;
544 PROCNAME(
"l_dnaRemoveNumber");
547 return ERROR_INT(
"da not defined", procName, 1);
549 if (index < 0 || index >= n)
550 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
552 for (i = index + 1; i < n; i++)
574 PROCNAME(
"l_dnaReplaceNumber");
577 return ERROR_INT(
"da not defined", procName, 1);
579 if (index < 0 || index >= n)
580 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
582 da->
array[index] = val;
599 PROCNAME(
"l_dnaGetCount");
602 return ERROR_INT(
"da not defined", procName, 0);
627 PROCNAME(
"l_dnaSetCount");
630 return ERROR_INT(
"da not defined", procName, 1);
631 if (newcount > da->
nalloc) {
633 sizeof(l_float64) * da->
nalloc,
634 sizeof(l_float64) * newcount)) == NULL)
635 return ERROR_INT(
"new ptr array not returned", procName, 1);
662 PROCNAME(
"l_dnaGetDValue");
665 return ERROR_INT(
"&val not defined", procName, 1);
668 return ERROR_INT(
"da not defined", procName, 1);
670 if (index < 0 || index >= da->
n)
671 return ERROR_INT(
"index not valid", procName, 1);
673 *pval = da->
array[index];
699 PROCNAME(
"l_dnaGetIValue");
702 return ERROR_INT(
"&ival not defined", procName, 1);
705 return ERROR_INT(
"da not defined", procName, 1);
707 if (index < 0 || index >= da->
n)
708 return ERROR_INT(
"index not valid", procName, 1);
710 val = da->
array[index];
711 *pival = (l_int32)(val + L_SIGN(val) * 0.5);
729 PROCNAME(
"l_dnaSetValue");
732 return ERROR_INT(
"da not defined", procName, 1);
733 if (index < 0 || index >= da->
n)
734 return ERROR_INT(
"index not valid", procName, 1);
736 da->
array[index] = val;
754 PROCNAME(
"l_dnaShiftValue");
757 return ERROR_INT(
"da not defined", procName, 1);
758 if (index < 0 || index >= da->
n)
759 return ERROR_INT(
"index not valid", procName, 1);
761 da->
array[index] += diff;
791 PROCNAME(
"l_dnaGetIArray");
794 return (l_int32 *)ERROR_PTR(
"da not defined", procName, NULL);
797 if ((array = (l_int32 *)LEPT_CALLOC(n,
sizeof(l_int32))) == NULL)
798 return (l_int32 *)ERROR_PTR(
"array not made", procName, NULL);
799 for (i = 0; i < n; i++) {
837 PROCNAME(
"l_dnaGetDArray");
840 return (l_float64 *)ERROR_PTR(
"da not defined", procName, NULL);
846 if ((array = (l_float64 *)LEPT_CALLOC(n,
sizeof(l_float64))) == NULL)
847 return (l_float64 *)ERROR_PTR(
"array not made", procName, NULL);
848 for (i = 0; i < n; i++)
849 array[i] = da->
array[i];
865 PROCNAME(
"l_dnaGetRefcount");
868 return ERROR_INT(
"da not defined", procName, UNDEF);
884 PROCNAME(
"l_dnaChangeRefcount");
887 return ERROR_INT(
"da not defined", procName, 1);
906 PROCNAME(
"l_dnaGetParameters");
908 if (pstartx) *pstartx = 0.0;
909 if (pdelx) *pdelx = 1.0;
910 if (!pstartx && !pdelx)
911 return ERROR_INT(
"neither &startx nor &delx are defined", procName, 1);
913 return ERROR_INT(
"da not defined", procName, 1);
915 if (pstartx) *pstartx = da->
startx;
916 if (pdelx) *pdelx = da->
delx;
936 PROCNAME(
"l_dnaSetParameters");
939 return ERROR_INT(
"da not defined", procName, 1);
958 l_float64 start, binsize;
960 PROCNAME(
"l_dnaCopyParameters");
963 return ERROR_INT(
"das and dad not both defined", procName, 1);
986 PROCNAME(
"l_dnaRead");
989 return (
L_DNA *)ERROR_PTR(
"filename not defined", procName, NULL);
992 return (
L_DNA *)ERROR_PTR(
"stream not opened", procName, NULL);
996 return (
L_DNA *)ERROR_PTR(
"da not read", procName, NULL);
1015 l_int32 i, n, index, ret, version;
1016 l_float64 val, startx, delx;
1019 PROCNAME(
"l_dnaReadStream");
1022 return (
L_DNA *)ERROR_PTR(
"stream not defined", procName, NULL);
1024 ret = fscanf(fp,
"\nL_Dna Version %d\n", &version);
1026 return (
L_DNA *)ERROR_PTR(
"not a l_dna file", procName, NULL);
1028 return (
L_DNA *)ERROR_PTR(
"invalid l_dna version", procName, NULL);
1029 if (fscanf(fp,
"Number of numbers = %d\n", &n) != 1)
1030 return (
L_DNA *)ERROR_PTR(
"invalid number of numbers", procName, NULL);
1033 return (
L_DNA *)ERROR_PTR(
"da not made", procName, NULL);
1034 for (i = 0; i < n; i++) {
1035 if (fscanf(fp,
" [%d] = %lf\n", &index, &val) != 2) {
1037 return (
L_DNA *)ERROR_PTR(
"bad input data", procName, NULL);
1043 if (fscanf(fp,
"startx = %lf, delx = %lf\n", &startx, &delx) == 2)
1062 PROCNAME(
"l_dnaWrite");
1065 return ERROR_INT(
"filename not defined", procName, 1);
1067 return ERROR_INT(
"da not defined", procName, 1);
1070 return ERROR_INT(
"stream not opened", procName, 1);
1074 return ERROR_INT(
"da not written to stream", procName, 1);
1091 l_float64 startx, delx;
1093 PROCNAME(
"l_dnaWriteStream");
1096 return ERROR_INT(
"stream not defined", procName, 1);
1098 return ERROR_INT(
"da not defined", procName, 1);
1102 fprintf(fp,
"Number of numbers = %d\n", n);
1103 for (i = 0; i < n; i++)
1104 fprintf(fp,
" [%d] = %f\n", i, da->
array[i]);
1109 if (startx != 0.0 || delx != 1.0)
1110 fprintf(fp,
"startx = %f, delx = %f\n", startx, delx);
1131 PROCNAME(
"l_dnaaCreate");
1137 if ((daa->
dna = (
L_DNA **)LEPT_CALLOC(n,
sizeof(
L_DNA *))) == NULL) {
1139 return (
L_DNAA *)ERROR_PTR(
"l_dna ptr array not made", procName, NULL);
1171 for (i = 0; i < nptr; i++) {
1199 PROCNAME(
"l_dnaaTruncate");
1202 return ERROR_INT(
"daa not defined", procName, 1);
1205 for (i = n - 1; i >= 0; i--) {
1233 PROCNAME(
"l_dnaaDestroy");
1236 L_WARNING(
"ptr address is NULL!\n", procName);
1240 if ((daa = *pdaa) == NULL)
1243 for (i = 0; i < daa->
n; i++)
1245 LEPT_FREE(daa->
dna);
1272 PROCNAME(
"l_dnaaAddDna");
1275 return ERROR_INT(
"daa not defined", procName, 1);
1277 return ERROR_INT(
"da not defined", procName, 1);
1281 }
else if (copyflag ==
L_COPY) {
1283 return ERROR_INT(
"dac not made", procName, 1);
1284 }
else if (copyflag ==
L_CLONE) {
1287 return ERROR_INT(
"invalid copyflag", procName, 1);
1308 PROCNAME(
"l_dnaaExtendArray");
1311 return ERROR_INT(
"daa not defined", procName, 1);
1316 return ERROR_INT(
"new ptr array not returned", procName, 1);
1335 PROCNAME(
"l_dnaaGetCount");
1338 return ERROR_INT(
"daa not defined", procName, 0);
1354 PROCNAME(
"l_dnaaGetDnaCount");
1357 return ERROR_INT(
"daa not defined", procName, 0);
1358 if (index < 0 || index >= daa->
n)
1359 return ERROR_INT(
"invalid index into daa", procName, 0);
1377 PROCNAME(
"l_dnaaGetNumberCount");
1380 return ERROR_INT(
"daa not defined", procName, 0);
1383 for (sum = 0, i = 0; i < n; i++) {
1406 PROCNAME(
"l_dnaaGetDna");
1409 return (
L_DNA *)ERROR_PTR(
"daa not defined", procName, NULL);
1410 if (index < 0 || index >= daa->
n)
1411 return (
L_DNA *)ERROR_PTR(
"index not valid", procName, NULL);
1413 if (accessflag ==
L_COPY)
1415 else if (accessflag ==
L_CLONE)
1418 return (
L_DNA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1444 PROCNAME(
"l_dnaaReplaceDna");
1447 return ERROR_INT(
"daa not defined", procName, 1);
1449 return ERROR_INT(
"da not defined", procName, 1);
1451 if (index < 0 || index >= n)
1452 return ERROR_INT(
"index not valid", procName, 1);
1455 daa->
dna[index] = da;
1478 PROCNAME(
"l_dnaaGetValue");
1481 return ERROR_INT(
"&val not defined", procName, 1);
1484 return ERROR_INT(
"daa not defined", procName, 1);
1486 if (i < 0 || i >= n)
1487 return ERROR_INT(
"invalid index into daa", procName, 1);
1489 if (j < 0 || j >= da->
n)
1490 return ERROR_INT(
"invalid index into da", procName, 1);
1491 *pval = da->
array[j];
1517 PROCNAME(
"l_dnaaAddNumber");
1520 return ERROR_INT(
"daa not defined", procName, 1);
1522 if (index < 0 || index >= n)
1523 return ERROR_INT(
"invalid index in daa", procName, 1);
1547 PROCNAME(
"l_dnaaRead");
1550 return (
L_DNAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1553 return (
L_DNAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1557 return (
L_DNAA *)ERROR_PTR(
"daa not read", procName, NULL);
1571 l_int32 i, n, index, ret, version;
1575 PROCNAME(
"l_dnaaReadStream");
1578 return (
L_DNAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1580 ret = fscanf(fp,
"\nL_Dnaa Version %d\n", &version);
1582 return (
L_DNAA *)ERROR_PTR(
"not a l_dna file", procName, NULL);
1584 return (
L_DNAA *)ERROR_PTR(
"invalid l_dnaa version", procName, NULL);
1585 if (fscanf(fp,
"Number of L_Dna = %d\n\n", &n) != 1)
1586 return (
L_DNAA *)ERROR_PTR(
"invalid number of l_dna", procName, NULL);
1588 return (
L_DNAA *)ERROR_PTR(
"daa not made", procName, NULL);
1590 for (i = 0; i < n; i++) {
1591 if (fscanf(fp,
"L_Dna[%d]:", &index) != 1) {
1593 return (
L_DNAA *)ERROR_PTR(
"invalid l_dna header", procName, NULL);
1597 return (
L_DNAA *)ERROR_PTR(
"da not made", procName, NULL);
1619 PROCNAME(
"l_dnaaWrite");
1622 return ERROR_INT(
"filename not defined", procName, 1);
1624 return ERROR_INT(
"daa not defined", procName, 1);
1627 return ERROR_INT(
"stream not opened", procName, 1);
1631 return ERROR_INT(
"daa not written to stream", procName, 1);
1650 PROCNAME(
"l_dnaaWriteStream");
1653 return ERROR_INT(
"stream not defined", procName, 1);
1655 return ERROR_INT(
"daa not defined", procName, 1);
1659 fprintf(fp,
"Number of L_Dna = %d\n\n", n);
1660 for (i = 0; i < n; i++) {
1662 return ERROR_INT(
"da not found", procName, 1);
1663 fprintf(fp,
"L_Dna[%d]:", i);
l_ok l_dnaReplaceNumber(L_DNA *da, l_int32 index, l_float64 val)
l_dnaReplaceNumber()
l_ok l_dnaaGetValue(L_DNAA *daa, l_int32 i, l_int32 j, l_float64 *pval)
l_dnaaGetValue()
l_int32 * l_dnaGetIArray(L_DNA *da)
l_dnaGetIArray()
l_ok l_dnaaWriteStream(FILE *fp, L_DNAA *daa)
l_dnaaWriteStream()
l_ok l_dnaaAddDna(L_DNAA *daa, L_DNA *da, l_int32 copyflag)
l_dnaaAddDna()
l_int32 l_dnaGetCount(L_DNA *da)
l_dnaGetCount()
l_ok l_dnaSetCount(L_DNA *da, l_int32 newcount)
l_dnaSetCount()
void l_dnaDestroy(L_DNA **pda)
l_dnaDestroy()
l_ok l_dnaGetParameters(L_DNA *da, l_float64 *pstartx, l_float64 *pdelx)
l_dnaGetParameters()
l_int32 l_dnaaGetNumberCount(L_DNAA *daa)
l_dnaaGetNumberCount()
l_int32 l_dnaaGetDnaCount(L_DNAA *daa, l_int32 index)
l_dnaaGetDnaCount()
L_DNAA * l_dnaaCreate(l_int32 n)
l_dnaaCreate()
l_ok l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival)
l_dnaGetIValue()
static const l_int32 INITIAL_PTR_ARRAYSIZE
L_DNA * l_dnaaGetDna(L_DNAA *daa, l_int32 index, l_int32 accessflag)
l_dnaaGetDna()
L_DNA * l_dnaClone(L_DNA *da)
l_dnaClone()
l_ok l_dnaAddNumber(L_DNA *da, l_float64 val)
l_dnaAddNumber()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
L_DNA * l_dnaRead(const char *filename)
l_dnaRead()
l_ok l_dnaWriteStream(FILE *fp, L_DNA *da)
l_dnaWriteStream()
l_ok l_dnaaWrite(const char *filename, L_DNAA *daa)
l_dnaaWrite()
L_DNAA * l_dnaaReadStream(FILE *fp)
l_dnaaReadStream()
l_ok l_dnaInsertNumber(L_DNA *da, l_int32 index, l_float64 val)
l_dnaInsertNumber()
l_ok l_dnaaReplaceDna(L_DNAA *daa, l_int32 index, L_DNA *da)
l_dnaaReplaceDna()
static l_int32 l_dnaExtendArray(L_DNA *da)
l_dnaExtendArray()
l_ok l_dnaEmpty(L_DNA *da)
l_dnaEmpty()
L_DNA * l_dnaReadStream(FILE *fp)
l_dnaReadStream()
l_ok l_dnaCopyParameters(L_DNA *dad, L_DNA *das)
l_dnaCopyParameters()
l_ok l_dnaShiftValue(L_DNA *da, l_int32 index, l_float64 diff)
l_dnaShiftValue()
l_float64 * l_dnaGetDArray(L_DNA *da, l_int32 copyflag)
l_dnaGetDArray()
void l_dnaaDestroy(L_DNAA **pdaa)
l_dnaaDestroy()
l_ok l_dnaGetDValue(L_DNA *da, l_int32 index, l_float64 *pval)
l_dnaGetDValue()
L_DNAA * l_dnaaRead(const char *filename)
l_dnaaRead()
static l_int32 l_dnaaExtendArray(L_DNAA *daa)
l_dnaaExtendArray()
L_DNAA * l_dnaaCreateFull(l_int32 nptr, l_int32 n)
l_dnaaCreateFull()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_ok l_dnaSetValue(L_DNA *da, l_int32 index, l_float64 val)
l_dnaSetValue()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_ok l_dnaaAddNumber(L_DNAA *daa, l_int32 index, l_float64 val)
l_dnaaAddNumber()
l_ok l_dnaSetParameters(L_DNA *da, l_float64 startx, l_float64 delx)
l_dnaSetParameters()
l_ok l_dnaWrite(const char *filename, L_DNA *da)
l_dnaWrite()
L_DNA * l_dnaCreate(l_int32 n)
l_dnaCreate()
l_int32 l_dnaaGetCount(L_DNAA *daa)
l_dnaaGetCount()
L_DNA * l_dnaCopy(L_DNA *da)
l_dnaCopy()
l_ok l_dnaaTruncate(L_DNAA *daa)
l_dnaaTruncate()
L_DNA * l_dnaMakeSequence(l_float64 startval, l_float64 increment, l_int32 size)
l_dnaMakeSequence()
L_DNA * l_dnaCreateFromIArray(l_int32 *iarray, l_int32 size)
l_dnaCreateFromIArray()
l_ok l_dnaRemoveNumber(L_DNA *da, l_int32 index)
l_dnaRemoveNumber()
#define DNA_VERSION_NUMBER
l_int32 l_dnaGetRefcount(L_DNA *da)
l_dnaGetRefCount()
L_DNA * l_dnaCreateFromDArray(l_float64 *darray, l_int32 size, l_int32 copyflag)
l_dnaCreateFromDArray()
l_ok l_dnaChangeRefcount(L_DNA *da, l_int32 delta)
l_dnaChangeRefCount()