20 m_keys = (Value*)malloc(m_capacity *
sizeof(Value));
21 m_values = (Value*)malloc(m_capacity *
sizeof(Value));
22 memset(m_keys, 0, m_capacity);
23 memset(m_values, 0, m_capacity);
59void ESTable::set(
const Value &key,
const Value &value)
61 for (uint i = 0; i < m_size; ++i) {
62 if (m_keys[i].sameValueZero(key)) {
68 if (m_capacity == m_size) {
69 uint oldCap = m_capacity;
71 m_keys = (Value*)realloc(m_keys, m_capacity *
sizeof(Value));
72 m_values = (Value*)realloc(m_values, m_capacity *
sizeof(Value));
73 memset(m_keys + oldCap, 0, m_capacity - oldCap);
74 memset(m_values + oldCap, 0, m_capacity - oldCap);
79 if (nk.doubleValue() == 0 && std::signbit(nk.doubleValue()))
80 nk = Value::fromDouble(+0);
84 m_values[m_size] = value;
118bool ESTable::remove(
const Value &key)
120 for (uint index = 0; index < m_size; ++index) {
121 if (m_keys[index].sameValueZero(key)) {
124 size_t count = (m_size - (index + 1)) *
sizeof(Value);
125 memmove(m_keys + index, m_keys + index + 1, count);
126 memmove(m_values + index, m_values + index + 1, count);
129 std::for_each(m_observers.begin(), m_observers.end(), [index](ShiftObserver* ob) {
131 if (index <= ob->pivot && ob->pivot != ShiftObserver::OUT_OF_TABLE)
132 ob->pivot = ob->pivot == 0 ? ShiftObserver::OUT_OF_TABLE : ob->pivot - 1;
158void ESTable::removeUnmarkedKeys()
162 for (; idx < m_size; ++idx) {
163 Q_ASSERT(m_keys[idx].isObject());
164 Object &o =
static_cast<Object &>(m_keys[idx]);
165 if (o.d()->isMarked()) {
166 m_keys[toIdx] = m_keys[idx];
167 m_values[toIdx] = m_values[idx];