/*! * l_dnaaAddDna() * * Input: daa * da (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 l_dnaaAddDna(L_DNAA *daa, L_DNA *da, l_int32 copyflag) { l_int32 n; L_DNA *dac; PROCNAME("l_dnaaAddDna"); if (!daa) return ERROR_INT("daa not defined", procName, 1); if (!da) return ERROR_INT("da not defined", procName, 1); if (copyflag == L_INSERT) { dac = da; } else if (copyflag == L_COPY) { if ((dac = l_dnaCopy(da)) == NULL) return ERROR_INT("dac not made", procName, 1); } else if (copyflag == L_CLONE) { dac = l_dnaClone(da); } else { return ERROR_INT("invalid copyflag", procName, 1); } n = l_dnaaGetCount(daa); if (n >= daa->nalloc) l_dnaaExtendArray(daa); daa->dna[n] = dac; daa->n++; return 0; }
/*! * \brief l_dnaHashGetDna() * * \param[in] dahash * \param[in] key key to be hashed into a bucket number * \param[in] copyflag L_NOCOPY, L_COPY, L_CLONE * \return ptr to dna */ L_DNA * l_dnaHashGetDna(L_DNAHASH *dahash, l_uint64 key, l_int32 copyflag) { l_int32 bucket; L_DNA *da; PROCNAME("l_dnaHashGetDna"); if (!dahash) return (L_DNA *)ERROR_PTR("dahash not defined", procName, NULL); bucket = key % dahash->nbuckets; da = dahash->dna[bucket]; if (da) { if (copyflag == L_NOCOPY) return da; else if (copyflag == L_COPY) return l_dnaCopy(da); else return l_dnaClone(da); } else return NULL; }
/*! * l_dnaaGetDna() * * Input: daa * index (to the index-th l_dna) * accessflag (L_COPY or L_CLONE) * Return: l_dna, or null on error */ L_DNA * l_dnaaGetDna(L_DNAA *daa, l_int32 index, l_int32 accessflag) { PROCNAME("l_dnaaGetDna"); if (!daa) return (L_DNA *)ERROR_PTR("daa not defined", procName, NULL); if (index < 0 || index >= daa->n) return (L_DNA *)ERROR_PTR("index not valid", procName, NULL); if (accessflag == L_COPY) return l_dnaCopy(daa->dna[index]); else if (accessflag == L_CLONE) return l_dnaClone(daa->dna[index]); else return (L_DNA *)ERROR_PTR("invalid accessflag", procName, NULL); }