target->nNumOfElements = 0;
target->nNextFreeElement = 0;
target->nInternalPointer = 0;
+ target->nTableSize = HT_MIN_SIZE;
HT_SET_DATA_ADDR(target, &uninitialized_bucket);
} else if (GC_FLAGS(source) & IS_ARRAY_IMMUTABLE) {
- HT_FLAGS(target) = HT_FLAGS(source);
+ HT_FLAGS(target) = HT_FLAGS(source) & HASH_FLAG_MASK;
target->nTableMask = source->nTableMask;
target->nNumUsed = source->nNumUsed;
target->nNumOfElements = source->nNumOfElements;
#define HASH_FLAG_HAS_EMPTY_IND (1<<5)
#define HASH_FLAG_ALLOW_COW_VIOLATION (1<<6)
+ /* Only the low byte are real flags */
+ #define HASH_FLAG_MASK 0xff
+
#define HT_FLAGS(ht) (ht)->u.flags
+#define HT_INVALIDATE(ht) do { \
+ HT_FLAGS(ht) = HASH_FLAG_UNINITIALIZED; \
+ } while (0)
+
+#define HT_IS_INITIALIZED(ht) \
+ ((HT_FLAGS(ht) & HASH_FLAG_UNINITIALIZED) == 0)
+
#define HT_IS_PACKED(ht) \
((HT_FLAGS(ht) & HASH_FLAG_PACKED) != 0)