154 #include <config_auto.h> 159 #include "allheaders.h" 162 static const l_uint32 MaxDoubleArraySize = 100000000;
163 static const l_uint32 MaxPtrArraySize = 1000000;
184 PROCNAME(
"l_dnaCreate");
186 if (n <= 0 || n > MaxDoubleArraySize)
190 if ((da->
array = (l_float64 *)LEPT_CALLOC(n,
sizeof(l_float64))) == NULL) {
192 return (
L_DNA *)ERROR_PTR(
"double array not made", procName, NULL);
227 PROCNAME(
"l_dnaCreateFromIArray");
230 return (
L_DNA *)ERROR_PTR(
"iarray not defined", procName, NULL);
232 return (
L_DNA *)ERROR_PTR(
"size must be > 0", procName, NULL);
235 for (i = 0; i < size; i++)
265 PROCNAME(
"l_dnaCreateFromDArray");
268 return (
L_DNA *)ERROR_PTR(
"darray not defined", procName, NULL);
270 return (
L_DNA *)ERROR_PTR(
"size must be > 0", procName, NULL);
272 return (
L_DNA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
280 for (i = 0; i < size; i++)
305 PROCNAME(
"l_dnaMakeSequence");
308 return (
L_DNA *)ERROR_PTR(
"da not made", procName, NULL);
310 for (i = 0; i < size; i++) {
311 val = startval + i * increment;
336 PROCNAME(
"l_dnaDestroy");
339 L_WARNING(
"ptr address is NULL\n", procName);
343 if ((da = *pda) == NULL)
350 LEPT_FREE(da->
array);
374 PROCNAME(
"l_dnaCopy");
377 return (
L_DNA *)ERROR_PTR(
"da not defined", procName, NULL);
380 return (
L_DNA *)ERROR_PTR(
"dac not made", procName, NULL);
384 for (i = 0; i < da->
n; i++)
400 PROCNAME(
"l_dnaClone");
403 return (
L_DNA *)ERROR_PTR(
"da not defined", procName, NULL);
426 PROCNAME(
"l_dnaEmpty");
429 return ERROR_INT(
"da not defined", procName, 1);
453 PROCNAME(
"l_dnaAddNumber");
456 return ERROR_INT(
"da not defined", procName, 1);
461 return ERROR_INT(
"extension failed", procName, 1);
484 size_t oldsize, newsize;
486 PROCNAME(
"l_dnaExtendArray");
489 return ERROR_INT(
"da not defined", procName, 1);
490 if (da->
nalloc > MaxDoubleArraySize)
491 return ERROR_INT(
"da at maximum size; can't extend", procName, 1);
492 oldsize = da->
nalloc *
sizeof(l_float64);
493 if (da->
nalloc > MaxDoubleArraySize / 2) {
494 newsize = MaxDoubleArraySize *
sizeof(l_float64);
495 da->
nalloc = MaxDoubleArraySize;
497 newsize = 2 * oldsize;
501 oldsize, newsize)) == NULL)
502 return ERROR_INT(
"new ptr array not returned", procName, 1);
532 PROCNAME(
"l_dnaInsertNumber");
535 return ERROR_INT(
"da not defined", procName, 1);
537 if (index < 0 || index > n) {
538 L_ERROR(
"index %d not in [0,...,%d]\n", procName, index, n);
544 return ERROR_INT(
"extension failed", procName, 1);
546 for (i = n; i > index; i--)
548 da->
array[index] = val;
574 PROCNAME(
"l_dnaRemoveNumber");
577 return ERROR_INT(
"da not defined", procName, 1);
579 if (index < 0 || index >= n) {
580 L_ERROR(
"index %d not in [0,...,%d]\n", procName, index, n - 1);
584 for (i = index + 1; i < n; i++)
606 PROCNAME(
"l_dnaReplaceNumber");
609 return ERROR_INT(
"da not defined", procName, 1);
611 if (index < 0 || index >= n) {
612 L_ERROR(
"index %d not in [0,...,%d]\n", procName, index, n - 1);
616 da->
array[index] = val;
633 PROCNAME(
"l_dnaGetCount");
636 return ERROR_INT(
"da not defined", procName, 0);
661 PROCNAME(
"l_dnaSetCount");
664 return ERROR_INT(
"da not defined", procName, 1);
665 if (newcount > da->
nalloc) {
667 sizeof(l_float64) * da->
nalloc,
668 sizeof(l_float64) * newcount)) == NULL)
669 return ERROR_INT(
"new ptr array not returned", procName, 1);
696 PROCNAME(
"l_dnaGetDValue");
699 return ERROR_INT(
"&val not defined", procName, 1);
702 return ERROR_INT(
"da not defined", procName, 1);
704 if (index < 0 || index >= da->
n)
705 return ERROR_INT(
"index not valid", procName, 1);
707 *pval = da->
array[index];
733 PROCNAME(
"l_dnaGetIValue");
736 return ERROR_INT(
"&ival not defined", procName, 1);
739 return ERROR_INT(
"da not defined", procName, 1);
741 if (index < 0 || index >= da->
n)
742 return ERROR_INT(
"index not valid", procName, 1);
744 val = da->
array[index];
745 *pival = (l_int32)(val + L_SIGN(val) * 0.5);
763 PROCNAME(
"l_dnaSetValue");
766 return ERROR_INT(
"da not defined", procName, 1);
767 if (index < 0 || index >= da->
n)
768 return ERROR_INT(
"index not valid", procName, 1);
770 da->
array[index] = val;
788 PROCNAME(
"l_dnaShiftValue");
791 return ERROR_INT(
"da not defined", procName, 1);
792 if (index < 0 || index >= da->
n)
793 return ERROR_INT(
"index not valid", procName, 1);
795 da->
array[index] += diff;
825 PROCNAME(
"l_dnaGetIArray");
828 return (l_int32 *)ERROR_PTR(
"da 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++) {
870 PROCNAME(
"l_dnaGetDArray");
873 return (l_float64 *)ERROR_PTR(
"da not defined", procName, NULL);
879 if ((array = (l_float64 *)LEPT_CALLOC(n,
sizeof(l_float64))) == NULL)
880 return (l_float64 *)ERROR_PTR(
"array not made", procName, NULL);
881 for (i = 0; i < n; i++)
882 array[i] = da->
array[i];
898 PROCNAME(
"l_dnaGetRefcount");
901 return ERROR_INT(
"da not defined", procName, UNDEF);
917 PROCNAME(
"l_dnaChangeRefcount");
920 return ERROR_INT(
"da not defined", procName, 1);
939 PROCNAME(
"l_dnaGetParameters");
941 if (pstartx) *pstartx = 0.0;
942 if (pdelx) *pdelx = 1.0;
943 if (!pstartx && !pdelx)
944 return ERROR_INT(
"neither &startx nor &delx are defined", procName, 1);
946 return ERROR_INT(
"da not defined", procName, 1);
948 if (pstartx) *pstartx = da->
startx;
949 if (pdelx) *pdelx = da->
delx;
969 PROCNAME(
"l_dnaSetParameters");
972 return ERROR_INT(
"da not defined", procName, 1);
991 l_float64 start, binsize;
993 PROCNAME(
"l_dnaCopyParameters");
996 return ERROR_INT(
"das and dad not both defined", procName, 1);
1019 PROCNAME(
"l_dnaRead");
1022 return (
L_DNA *)ERROR_PTR(
"filename not defined", procName, NULL);
1025 return (
L_DNA *)ERROR_PTR(
"stream not opened", procName, NULL);
1029 return (
L_DNA *)ERROR_PTR(
"da not read", procName, NULL);
1049 l_int32 i, n, index, ret, version;
1050 l_float64 val, startx, delx;
1053 PROCNAME(
"l_dnaReadStream");
1056 return (
L_DNA *)ERROR_PTR(
"stream not defined", procName, NULL);
1058 ret = fscanf(fp,
"\nL_Dna Version %d\n", &version);
1060 return (
L_DNA *)ERROR_PTR(
"not a l_dna file", procName, NULL);
1062 return (
L_DNA *)ERROR_PTR(
"invalid l_dna version", procName, NULL);
1063 if (fscanf(fp,
"Number of numbers = %d\n", &n) != 1)
1064 return (
L_DNA *)ERROR_PTR(
"invalid number of numbers", procName, NULL);
1066 return (
L_DNA *)ERROR_PTR(
"num doubles < 0", procName, NULL);
1067 if (n > MaxDoubleArraySize)
1068 return (
L_DNA *)ERROR_PTR(
"too many doubles", procName, NULL);
1069 if (n == 0) L_INFO(
"the dna is empty\n", procName);
1072 return (
L_DNA *)ERROR_PTR(
"da not made", procName, NULL);
1073 for (i = 0; i < n; i++) {
1074 if (fscanf(fp,
" [%d] = %lf\n", &index, &val) != 2) {
1076 return (
L_DNA *)ERROR_PTR(
"bad input data", procName, NULL);
1082 if (fscanf(fp,
"startx = %lf, delx = %lf\n", &startx, &delx) == 2)
1102 PROCNAME(
"l_dnaReadMem");
1105 return (
L_DNA *)ERROR_PTR(
"data not defined", procName, NULL);
1107 return (
L_DNA *)ERROR_PTR(
"stream not opened", procName, NULL);
1111 if (!da) L_ERROR(
"dna not read\n", procName);
1130 PROCNAME(
"l_dnaWrite");
1133 return ERROR_INT(
"filename not defined", procName, 1);
1135 return ERROR_INT(
"da not defined", procName, 1);
1138 return ERROR_INT(
"stream not opened", procName, 1);
1142 return ERROR_INT(
"da not written to stream", procName, 1);
1159 l_float64 startx, delx;
1161 PROCNAME(
"l_dnaWriteStream");
1164 return ERROR_INT(
"da not defined", procName, 1);
1170 fprintf(fp,
"Number of numbers = %d\n", n);
1171 for (i = 0; i < n; i++)
1172 fprintf(fp,
" [%d] = %f\n", i, da->
array[i]);
1177 if (startx != 0.0 || delx != 1.0)
1178 fprintf(fp,
"startx = %f, delx = %f\n", startx, delx);
1194 l_float64 startx, delx;
1196 PROCNAME(
"l_dnaWriteStderr");
1199 return ERROR_INT(
"da not defined", procName, 1);
1204 for (i = 0; i < n; i++)
1210 if (startx != 0.0 || delx != 1.0)
1211 lept_stderr(
"startx = %f, delx = %f\n", startx, delx);
1238 PROCNAME(
"l_dnaWriteMem");
1240 if (pdata) *pdata = NULL;
1241 if (psize) *psize = 0;
1243 return ERROR_INT(
"&data not defined", procName, 1);
1245 return ERROR_INT(
"&size not defined", procName, 1);
1247 return ERROR_INT(
"da not defined", procName, 1);
1250 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1251 return ERROR_INT(
"stream not opened", procName, 1);
1255 *psize = *psize - 1;
1257 L_INFO(
"work-around: writing to a temp file\n", procName);
1260 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1262 if ((fp = tmpfile()) == NULL)
1263 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1289 PROCNAME(
"l_dnaaCreate");
1291 if (n <= 0 || n > MaxPtrArraySize)
1295 if ((daa->
dna = (
L_DNA **)LEPT_CALLOC(n,
sizeof(
L_DNA *))) == NULL) {
1297 return (
L_DNAA *)ERROR_PTR(
"l_dna ptr array not made", procName, NULL);
1329 for (i = 0; i < nptr; i++) {
1357 PROCNAME(
"l_dnaaTruncate");
1360 return ERROR_INT(
"daa not defined", procName, 1);
1363 for (i = n - 1; i >= 0; i--) {
1391 PROCNAME(
"l_dnaaDestroy");
1394 L_WARNING(
"ptr address is NULL!\n", procName);
1398 if ((daa = *pdaa) == NULL)
1401 for (i = 0; i < daa->
n; i++)
1403 LEPT_FREE(daa->
dna);
1428 PROCNAME(
"l_dnaaAddDna");
1431 return ERROR_INT(
"daa not defined", procName, 1);
1433 return ERROR_INT(
"da not defined", procName, 1);
1437 }
else if (copyflag ==
L_COPY) {
1439 return ERROR_INT(
"dac not made", procName, 1);
1440 }
else if (copyflag ==
L_CLONE) {
1443 return ERROR_INT(
"invalid copyflag", procName, 1);
1451 return ERROR_INT(
"extension failed", procName, 1);
1475 size_t oldsize, newsize;
1477 PROCNAME(
"l_dnaaExtendArray");
1480 return ERROR_INT(
"daa not defined", procName, 1);
1481 if (daa->
nalloc > MaxPtrArraySize)
1482 return ERROR_INT(
"daa has too many ptrs", procName, 1);
1484 newsize = 2 * oldsize;
1485 if (newsize > 8 * MaxPtrArraySize)
1486 return ERROR_INT(
"newsize > 8 MB; too large", procName, 1);
1489 oldsize, newsize)) == NULL)
1490 return ERROR_INT(
"new ptr array not returned", procName, 1);
1509 PROCNAME(
"l_dnaaGetCount");
1512 return ERROR_INT(
"daa not defined", procName, 0);
1528 PROCNAME(
"l_dnaaGetDnaCount");
1531 return ERROR_INT(
"daa not defined", procName, 0);
1532 if (index < 0 || index >= daa->
n)
1533 return ERROR_INT(
"invalid index into daa", procName, 0);
1551 PROCNAME(
"l_dnaaGetNumberCount");
1554 return ERROR_INT(
"daa not defined", procName, 0);
1557 for (sum = 0, i = 0; i < n; i++) {
1580 PROCNAME(
"l_dnaaGetDna");
1583 return (
L_DNA *)ERROR_PTR(
"daa not defined", procName, NULL);
1584 if (index < 0 || index >= daa->
n)
1585 return (
L_DNA *)ERROR_PTR(
"index not valid", procName, NULL);
1587 if (accessflag ==
L_COPY)
1589 else if (accessflag ==
L_CLONE)
1592 return (
L_DNA *)ERROR_PTR(
"invalid accessflag", procName, NULL);
1618 PROCNAME(
"l_dnaaReplaceDna");
1621 return ERROR_INT(
"daa not defined", procName, 1);
1623 return ERROR_INT(
"da not defined", procName, 1);
1625 if (index < 0 || index >= n)
1626 return ERROR_INT(
"index not valid", procName, 1);
1629 daa->
dna[index] = da;
1652 PROCNAME(
"l_dnaaGetValue");
1655 return ERROR_INT(
"&val not defined", procName, 1);
1658 return ERROR_INT(
"daa not defined", procName, 1);
1660 if (i < 0 || i >= n)
1661 return ERROR_INT(
"invalid index into daa", procName, 1);
1663 if (j < 0 || j >= da->
n)
1664 return ERROR_INT(
"invalid index into da", procName, 1);
1665 *pval = da->
array[j];
1691 PROCNAME(
"l_dnaaAddNumber");
1694 return ERROR_INT(
"daa not defined", procName, 1);
1696 if (index < 0 || index >= n)
1697 return ERROR_INT(
"invalid index in daa", procName, 1);
1721 PROCNAME(
"l_dnaaRead");
1724 return (
L_DNAA *)ERROR_PTR(
"filename not defined", procName, NULL);
1727 return (
L_DNAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1731 return (
L_DNAA *)ERROR_PTR(
"daa not read", procName, NULL);
1750 l_int32 i, n, index, ret, version;
1754 PROCNAME(
"l_dnaaReadStream");
1757 return (
L_DNAA *)ERROR_PTR(
"stream not defined", procName, NULL);
1759 ret = fscanf(fp,
"\nL_Dnaa Version %d\n", &version);
1761 return (
L_DNAA *)ERROR_PTR(
"not a l_dna file", procName, NULL);
1763 return (
L_DNAA *)ERROR_PTR(
"invalid l_dnaa version", procName, NULL);
1764 if (fscanf(fp,
"Number of L_Dna = %d\n\n", &n) != 1)
1765 return (
L_DNAA *)ERROR_PTR(
"invalid number of l_dna", procName, NULL);
1767 return (
L_DNAA *)ERROR_PTR(
"num l_dna <= 0", procName, NULL);
1768 if (n > MaxPtrArraySize)
1769 return (
L_DNAA *)ERROR_PTR(
"too many l_dna", procName, NULL);
1770 if (n == 0) L_INFO(
"the dnaa is empty\n", procName);
1773 return (
L_DNAA *)ERROR_PTR(
"daa not made", procName, NULL);
1774 for (i = 0; i < n; i++) {
1775 if (fscanf(fp,
"L_Dna[%d]:", &index) != 1) {
1777 return (
L_DNAA *)ERROR_PTR(
"invalid l_dna header", procName, NULL);
1781 return (
L_DNAA *)ERROR_PTR(
"da not made", procName, NULL);
1804 PROCNAME(
"l_dnaaReadMem");
1807 return (
L_DNAA *)ERROR_PTR(
"data not defined", procName, NULL);
1809 return (
L_DNAA *)ERROR_PTR(
"stream not opened", procName, NULL);
1813 if (!daa) L_ERROR(
"daa not read\n", procName);
1832 PROCNAME(
"l_dnaaWrite");
1835 return ERROR_INT(
"filename not defined", procName, 1);
1837 return ERROR_INT(
"daa not defined", procName, 1);
1840 return ERROR_INT(
"stream not opened", procName, 1);
1844 return ERROR_INT(
"daa not written to stream", procName, 1);
1863 PROCNAME(
"l_dnaaWriteStream");
1866 return ERROR_INT(
"stream not defined", procName, 1);
1868 return ERROR_INT(
"daa not defined", procName, 1);
1872 fprintf(fp,
"Number of L_Dna = %d\n\n", n);
1873 for (i = 0; i < n; i++) {
1875 return ERROR_INT(
"da not found", procName, 1);
1876 fprintf(fp,
"L_Dna[%d]:", i);
1906 PROCNAME(
"l_dnaaWriteMem");
1908 if (pdata) *pdata = NULL;
1909 if (psize) *psize = 0;
1911 return ERROR_INT(
"&data not defined", procName, 1);
1913 return ERROR_INT(
"&size not defined", procName, 1);
1915 return ERROR_INT(
"daa not defined", procName, 1);
1918 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1919 return ERROR_INT(
"stream not opened", procName, 1);
1923 *psize = *psize - 1;
1925 L_INFO(
"work-around: writing to a temp file\n", procName);
1928 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1930 if ((fp = tmpfile()) == NULL)
1931 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
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_dnaaReadMem(const l_uint8 *data, size_t size)
l_dnaaReadMem()
L_DNAA * l_dnaaCreate(l_int32 n)
l_dnaaCreate()
void lept_stderr(const char *fmt,...)
lept_stderr()
l_ok l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival)
l_dnaGetIValue()
L_DNA * l_dnaaGetDna(L_DNAA *daa, l_int32 index, l_int32 accessflag)
l_dnaaGetDna()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
L_DNA * l_dnaClone(L_DNA *da)
l_dnaClone()
l_ok l_dnaAddNumber(L_DNA *da, l_float64 val)
l_dnaAddNumber()
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()
static const l_int32 InitialArraySize
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()
void * reallocNew(void **pindata, size_t oldsize, size_t newsize)
reallocNew()
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()
l_ok l_dnaaWriteMem(l_uint8 **pdata, size_t *psize, L_DNAA *daa)
l_dnaaWriteMem()
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()
FILE * fopenWriteWinTempfile(void)
fopenWriteWinTempfile()
l_ok l_dnaSetValue(L_DNA *da, l_int32 index, l_float64 val)
l_dnaSetValue()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
L_DNA * l_dnaReadMem(const l_uint8 *data, size_t size)
l_dnaReadMem()
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_ok l_dnaWriteMem(l_uint8 **pdata, size_t *psize, L_DNA *da)
l_dnaWriteMem()
L_DNA * l_dnaCreateFromIArray(l_int32 *iarray, l_int32 size)
l_dnaCreateFromIArray()
l_ok l_dnaRemoveNumber(L_DNA *da, l_int32 index)
l_dnaRemoveNumber()
l_ok l_dnaWriteStderr(L_DNA *da)
l_dnaWriteStrderr()
#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()