void BBSortEx_flush(BBSortEx *self) { u32_t cache_count = self->cache_max - self->cache_tick; VArray *elems; BBSortExRun *run; u32_t i; if (!cache_count) return; else elems = VA_new(cache_count); /* Sort, then create a new run. */ BBSortEx_Sort_Cache(self); for (i = self->cache_tick; i < self->cache_max; i++) { VA_Push(elems, self->cache[i]); } run = BBSortExRun_new(elems); DECREF(elems); BBSortEx_Add_Run(self, (SortExRun*)run); DECREF(run); /* Blank the cache vars. */ self->cache_tick += cache_count; SortEx_Clear_Cache(self); }
void BBSortEx_flush(BBSortEx *self) { uint32_t cache_count = self->cache_max - self->cache_tick; Obj **cache = (Obj**)self->cache; VArray *elems; if (!cache_count) { return; } else { elems = VA_new(cache_count); } // Sort, then create a new run. BBSortEx_Sort_Cache(self); for (uint32_t i = self->cache_tick; i < self->cache_max; i++) { VA_Push(elems, cache[i]); } BBSortEx *run = BBSortEx_new(0, elems); DECREF(elems); BBSortEx_Add_Run(self, (SortExternal*)run); // Blank the cache vars. self->cache_tick += cache_count; BBSortEx_Clear_Cache(self); }