/*! * numaaAddNuma() * * Input: naa * na (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag) { l_int32 n; NUMA *nac; PROCNAME("numaaAddNuma"); if (!naa) return ERROR_INT("naa not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); if (copyflag == L_INSERT) { nac = na; } else if (copyflag == L_COPY) { if ((nac = numaCopy(na)) == NULL) return ERROR_INT("nac not made", procName, 1); } else if (copyflag == L_CLONE) { nac = numaClone(na); } else { return ERROR_INT("invalid copyflag", procName, 1); } n = numaaGetCount(naa); if (n >= naa->nalloc) numaaExtendArray(naa); naa->numa[n] = nac; naa->n++; return 0; }
/*! * wshedBasins() * * Input: wshed * &pixa (<optional return> mask of watershed basins) * &nalevels (<optional return> watershed levels) * Return: 0 if OK, 1 on error */ l_int32 wshedBasins(L_WSHED *wshed, PIXA **ppixa, NUMA **pnalevels) { PROCNAME("wshedBasins"); if (!wshed) return ERROR_INT("wshed not defined", procName, 1); if (ppixa) *ppixa = pixaCopy(wshed->pixad, L_CLONE); if (pnalevels) *pnalevels = numaClone(wshed->nalevels); return 0; }
/*! * numa2dGetNuma() * * Input: na2d * row of 2d array * col of 2d array * Return: na (a clone of the numa if it exists) or null if it doesn't * * Notes: * (1) This does not give an error if the index is out of bounds. */ NUMA * numa2dGetNuma(NUMA2D *na2d, l_int32 row, l_int32 col) { NUMA *na; PROCNAME("numa2dGetNuma"); if (!na2d) return (NUMA *)ERROR_PTR("na2d not defined", procName, NULL); if (row < 0 || row >= na2d->nrows || col < 0 || col >= na2d->ncols) return NULL; if ((na = na2d->numa[row][col]) == NULL) return NULL; return numaClone(na); }
/*! * numaHashGetNuma() * * Input: nahash * key (key to be hashed into a bucket number) * Return: ptr to numa */ NUMA * numaHashGetNuma(NUMAHASH *nahash, l_uint32 key) { l_int32 bucket; NUMA *na; PROCNAME("numaHashGetNuma"); if (!nahash) return (NUMA *)ERROR_PTR("nahash not defined", procName, NULL); bucket = key % nahash->nbuckets; na = nahash->numa[bucket]; if (na) return numaClone(na); else return NULL; }
/*! * numaaGetNuma() * * Input: naa * index (to the index-th numa) * accessflag (L_COPY or L_CLONE) * Return: numa, or null on error */ NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag) { PROCNAME("numaaGetNuma"); if (!naa) return (NUMA *)ERROR_PTR("naa not defined", procName, NULL); if (index < 0 || index >= naa->n) return (NUMA *)ERROR_PTR("index not valid", procName, NULL); if (accessflag == L_COPY) return numaCopy(naa->numa[index]); else if (accessflag == L_CLONE) return numaClone(naa->numa[index]); else return (NUMA *)ERROR_PTR("invalid accessflag", procName, NULL); }