bool Table::SetArrayValue(std::size_t index, const Value &value) { if (index < 1) return false; std::size_t array_size = ArraySize(); if (index > array_size + 1) return false; if (index == array_size + 1) { AppendToArray(value); // move all continuous key from hash to array Value key; key.num_ = ++index; key.type_ = ValueT_Number; while (MoveHashToArray(key)) key.num_ = ++index; } else { (*array_)[index - 1] = value; } return true; }
void Table::MergeFromHashToArray() { auto index = ArraySize(); Value key; key.num_ = ++index; key.type_ = ValueT_Number; while (MoveHashToArray(key)) key.num_ = ++index; }