void CMapLayers::LoadEnvPoints(const CLayers *pLayers, array<CEnvPoint>& lEnvPoints) { lEnvPoints.clear(); // get envelope points CEnvPoint *pPoints = 0x0; { int Start, Num; pLayers->Map()->GetType(MAPITEMTYPE_ENVPOINTS, &Start, &Num); if(!Num) return; pPoints = (CEnvPoint *)pLayers->Map()->GetItem(Start, 0, 0); } // get envelopes int Start, Num; pLayers->Map()->GetType(MAPITEMTYPE_ENVELOPE, &Start, &Num); if(!Num) return; for(int env = 0; env < Num; env++) { CMapItemEnvelope *pItem = (CMapItemEnvelope *)pLayers->Map()->GetItem(Start+env, 0, 0); if(pItem->m_Version >= 3) { for(int i = 0; i < pItem->m_NumPoints; i++) lEnvPoints.add(pPoints[i + pItem->m_StartPoint]); } else { // backwards compatibility for(int i = 0; i < pItem->m_NumPoints; i++) { // convert CEnvPoint_v1 -> CEnvPoint CEnvPoint_v1 *pEnvPoint_v1 = &((CEnvPoint_v1 *)pPoints)[i + pItem->m_StartPoint]; CEnvPoint p; p.m_Time = pEnvPoint_v1->m_Time; p.m_Curvetype = pEnvPoint_v1->m_Curvetype; for(int c = 0; c < pItem->m_Channels; c++) { p.m_aValues[c] = pEnvPoint_v1->m_aValues[c]; p.m_aInTangentdx[c] = 0; p.m_aInTangentdy[c] = 0; p.m_aOutTangentdx[c] = 0; p.m_aOutTangentdy[c] = 0; } lEnvPoints.add(p); } } } }
/// Add `v` to the entry `k`. It returns in `is_new` true if the /// entry `k` did not exist in the hash. In `id` is returned the /// final position of `k` in the hash array. void add(const Key& k, uint64_t v, bool* is_new, size_t* id) { unsigned int carry_shift = 0; bool* is_new_ptr = is_new; size_t* id_ptr = id; bool is_new_void = false; size_t id_void = false; while(!ary_->add(k, v, &carry_shift, is_new_ptr, id_ptr)) { handle_full_ary(); v &= ~(uint64_t)0 << carry_shift; // If carry_shift == 0, failed to allocate the first field for // key, hence status of is_new and value for id are not // determined yet. On the other hand, if carry_shift > 0, we // failed while adding extra field for large key, so the status // of is_new and value of id are known. We do not update them in future // calls. if(carry_shift) { is_new_ptr = &is_new_void; id_ptr = &id_void; } } }
void addarray (array<string>& dest, const type* const strings, const int numberofstrings) { for (int i = 0; i < numberofstrings; ++i) dest.add (strings [i]); }
void addarray (array<string>& dest, const chartype* const* strings) { if (strings != nullptr) while (*strings != nullptr) dest.add (*strings++); }