Esempio n. 1
0
        public static void Verify(PtrLst *self)
        {
            Should.NotNull("self", self);
            Should.TypeEqual("self", self->type, Type);
            int len = Mem.Verify(self->arr) / sizeof(void *);

            Should.Equal("self->len", self->len, len);
            Should.InRange("self->count", self->count, 0, self->len);
            Should.Equal("self->size", self->size, sizeof(void *));
        }
Esempio n. 2
0
        public static void RemoveAt(PtrLst *self, int idx)
        {
                        #if FDB
            Verify(self);
            Should.InRange("idx", idx, 0, self->count - 1);
                        #endif
            byte *src   = (byte *)(self->arr + idx);
            int   size  = self->size;
            int   count = self->count -= 1;
//			void **arr = self->arr;
//			for (int i = idx; i < count; i += 1) arr[i] = arr[i + 1];
            Mem.Memmove(src, src + size, (count - idx) * size);
        }
Esempio n. 3
0
        public static void Verify(PtrIntDict *self)
        {
            Should.NotNull("self", self);
            Should.InRange("self->level", self->level, 0, Const.Lens.Length - 1);
            Should.Equal("self->len", self->len, Const.Lens[self->level]);
            Should.InRange("self->count", self->count, 0, self->len);
            Should.InRange("self->free", self->free, -1, self->len - 1);
            Mem.Verify(self->entries);
            Should.NotNull("self->arr", self->arr);

            int len   = self->len;
            int count = self->count;
            int j     = 0;

            for (int i = 0; i < len; i += 1)
            {
                var entry = self->entries + i;
                if (entry->val != null)                    // a real key
                {
                    j += 1;
                }
            }
            Should.Equal("j", j, count);

            int freeCount = len - count;
            int free      = self->free;

            while (free != -1)
            {
                freeCount -= 1;
                free       = self->entries[free].next;
            }
            Should.Zero("freeCount", freeCount);

            j = 0;
            for (int i = 0; i < len; i += 1)
            {
                int idx = self->arr[i];
                while (idx != -1)
                {
                    var entry = self->entries + idx;
                    Should.Equal("entry->hash % len", (uint)entry->hash % len, i);
                    j  += 1;
                    idx = entry->next;
                }
            }
//			Fdb.Dump(self->arr, self->len * IntSize);
//			Fdb.Dump(self->entries, self->len * EntrySize, EntrySize);
            Should.Equal("j", j, count);
        }
Esempio n. 4
0
        public static void Free(Pool *self, void *ptr)
        {
                        #if FDB
            Verify(self);
            Should.InRange("ptr", ptr, self->arr, self->arr + self->len);
                        #endif
            byte *arr = self->arr;
//			Fdb.Dump(arr, self->len);

            int *head = (int *)ptr - 3;
            SetFreeMetaAndInsert(arr, head, head[2]);
                        #if FDB
            Verify(self);
                        #endif
            MergeRight(arr, head);
                        #if FDB
            Verify(self);
                        #endif
            MergeLeft(arr, head);
                        #if FDB
            Verify(self);
                        #endif
        }