x_Parity(
unsigned intv)
231v = (v & 0x11111111U) * 0x11111111U;
232 return(v >> 28) & 1;
238 return(0x6996 >> v) & 1;
271 if(!base != !
size)
275(
"Heap Create: Storage too small:" 276 " provided %u, required %u+",
289 heap->auxarg =
heap->resize ? auxarg : 0;
297(
"Heap Create: Unaligned base (0x%08lX)",
321(
"Heap Attach: Unaligned base (0x%08lX)", (
long) base));
328 heap->serial = serial;
331(
"Heap Attach: Heap size truncation (%u->%u)" 332 " can result in missing data",
343 if(base && (!maxsize || maxsize >
sizeof(
SHEAP_Block))) {
351(
"Heap Attach: Heap corrupt @%u (0x%08X, %u)",
353 b->head.flag,
b->head.size));
357 size+=
b->head.size;
362(
"Heap Attach: Runaway heap @%u (0x%08X, %u)" 363 " size=%u vs. maxsize=%u",
365 b->head.flag,
b->head.size,
408 if(!hint && need < (e->
head.
size>> 1)) {
412 if(b < heap->base ||
heap->base +
heap->size <=
b) {
419 if(need <= b->
head.size) {
428 f=
b->head.size < need ? 0 :
b;
429 for(
b=
heap->base +
b->prevfree; ;
b=
heap->base +
b->prevfree) {
431 if(b < heap->base ||
heap->base +
heap->size <=
b) {
438 if(
b== e ||
b->head.size < need)
447 char_id[32],
msg[80];
449sprintf(
msg,
" (0x%08X, %u)",
b->head.flag,
b->head.size);
453(
"Heap Find%s: Heap corrupt @%u/%u%s",
469 f->prevfree =
free;
470 f->nextfree =
free;
477 if(
b->head.size <
f->head.size) {
480 f->nextfree =
b->nextfree;
482 heap->base[
b->nextfree].prevfree =
free;
483 b->nextfree =
free;
492 f->prevfree =
b->prevfree;
493 heap->base[
b->prevfree].nextfree =
free;
494 b->prevfree =
free;
499 #if defined(_DEBUG) && !defined(NDEBUG) 500 # define s_HEAP_Unlink(b) { b->prevfree = b->nextfree = ~((TNCBI_Size) 0); } 502 # define s_HEAP_Unlink(b) 519 unsigned int last= 0;
529 assert(!need ||
b->head.size < need);
531 free+=
b->head.size;
534 assert(
f!= p && (u || (!
n&& !need)));
537 heap->base[
b->prevfree].nextfree =
b->nextfree;
538 heap->base[
b->nextfree].prevfree =
b->prevfree;
540 heap->free =
b->prevfree;
545 heap->base[
f->prevfree].nextfree =
f->nextfree;
546 heap->base[
f->nextfree].prevfree =
f->prevfree;
547}
else if(
heap->free !=
f->prevfree) {
548 heap->base[
f->prevfree].nextfree =
f->nextfree;
549 heap->base[
f->nextfree].prevfree =
f->prevfree;
550 heap->free =
f->prevfree;
552 assert(
f->prevfree ==
f->nextfree);
564 f->head.flag =
last;
565 f->head.size =
free;
572 if(need && need <=
free)
588 f->head.flag = (p ? p->head.size : 0) |
last;
614 f->head.size -=
size;
617 b->head.size =
size;
622 b->head.size =
size;
624 f->head.flag =
b->head.flag;
625 f->head.size = save -
size;
636memset((
char*)
b+ need, 0,
size);
670 n=
heap->base +
f->nextfree;
673 assert(
f->prevfree ==
f->nextfree);
677 n->prevfree =
f->prevfree;
678 heap->base[
f->prevfree].nextfree =
f->nextfree;
680 heap->free =
f->prevfree;
704(
"Heap Alloc%s: Unaligned base (0x%08lX)",
709dsize = hsize - dsize;
710memset(base +
heap->size, 0, dsize);
711 f= base +
heap->last;
715 f->head.size = hsize;
725 f= base +
heap->size;
727 f->head.size = dsize;
731 if(
f!= base +
heap->free) {
734}
else if(
heap->free !=
f->prevfree) {
737 heap->free =
f->prevfree;
739 assert(
f->prevfree ==
f->nextfree);
742 f->head.size += dsize;
768 assert((!p ||
heap->base <= p) && n <= heap->base +
heap->size);
771 b->head.flag =
last;
775 b->head.size +=
n->head.size;
782 if(
heap->free ==
n->prevfree) {
784 assert(
n->prevfree ==
n->nextfree);
786 b->prevfree =
heap->free;
787 b->nextfree =
heap->free;
790 heap->free =
n->prevfree;
792 heap->base[
n->nextfree].prevfree =
n->prevfree;
793 heap->base[
n->prevfree].nextfree =
n->nextfree;
804 if(p ==
heap->base +
heap->free) {
847(
"Heap Free%s: Heap corrupt @%u/%u (0x%08X, %u)",
849 heap->size,
b->head.flag,
b->head.size));
855(
"Heap Free%s: Freeing free block @%u",
910 if(!p || p < heap->base || e <= p)
915(
"Heap Free%s: Lame hint%s for block @%u",
922(
"Heap Free%s: Freeing free block @%u",
942 if(!
heap->chunk) {
958 if(!
b||
b->head.size <
heap->chunk) {
961}
else if(!(
size=
b->head.size %
heap->chunk)) {
970 if(
heap->resize) {
979(
"Heap Trim%s: Unaligned base (0x%08lX)",
997 b->head.size =
size;
1006(
"Heap Trim%s: Heap not trimmable",
s_HEAP_Id(_id,
heap)));
1023 if(p < heap->base || e <= p
1034 if(e <=
b||
b<= p
1038 if(
b!= e || (
b&& !p)) {
1043(
"Heap Walk%s: No last block @%u",
s_HEAP_Id(_id,
heap),
1050(
n< e || (
heap->chunk
&& b < heap->base +
heap->last))) {
1051 if(
heap->chunk
) {
1054?
"expected":
"invalid",
heap->last);
1064 if(
heap->chunk
) {
1069 for(
i= 0;
i<
heap->size; ++
i) {
1083 if(
self|| (c <=
b&&
b<= s)){
1084 if(
ok|| s <
n) {
1099 if(s ==
heap->base +
heap->free)
1115 if(
heap->size <=
b->prevfree ||
1116 heap->size <=
b->nextfree
1120}
else if(
b->prevfree !=
b->nextfree ||
1121 b!=
heap->base +
b->nextfree) {
1122 for(
i= 0;
i<
heap->size; ++
i) {
1124 b=
heap->base +
b->nextfree;
1126 heap->size <=
b->nextfree ||
1127s !=
heap->base +
b->prevfree) {
1135 b=
heap->base +
b->nextfree;
1137 if(!c || !
b||
b!= c) {
1139sprintf(
msg,
" @%u/%u (%u, <-%u, %u->)",
1146 b&& c ?
"broken":
"corrupt",
msg));
1155 for(
i= 0; c < e &&
i<
heap->size; ++
i) {
1160(
"Heap Walk%s: Used block @%u within" 1169 if(c ==
heap->base +
heap->free)
1189(
"Heap Walk%s: Adjacent free blocks" 1269 char* base = (
char*)
copy+
sizeof(*
copy);
1283 copy->serial = serial;
1297 if(
heap->refcnt) {
1301 return heap->refcnt;
1310 if(
heap->refcnt && --
heap->refcnt)
1311 return heap->refcnt;
1312memset(
heap, 0,
sizeof(*
heap));
1325 if(!
heap->chunk && !
heap->refcnt) {
1327(
"Heap Destroy%s: Heap read-only",
s_HEAP_Id(_id,
heap)));
1328}
else if(
heap->resize
)
1370 size+=
b->head.size;
1371 b=
heap->base +
b->prevfree;
1373 #if defined(_DEBUG) && !defined(NDEBUG) 1377alt_size +=
b->head.size;
1378 b=
heap->base +
b->nextfree;
1396 return heap->serial;
static int heap[2 *(256+1+29)+1]
static DLIST_TYPE *DLIST_NAME() last(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() prev(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
SHEAP_Block * HEAP_Next(const HEAP heap, const SHEAP_Block *ptr)
void * HEAP_Base(const HEAP heap)
void HEAP_Options(ESwitch fast, ESwitch unused)
SHEAP_Block * HEAP_Alloc(HEAP heap, TNCBI_Size size, int tail)
HEAP HEAP_Copy(const HEAP heap, size_t extra, int serial)
SHEAP_Block * HEAP_Walk(const HEAP heap, const SHEAP_Block *ptr)
HEAP HEAP_Create(void *base, TNCBI_Size size, TNCBI_Size chunk, FHEAP_Resize resize, void *auxarg)
unsigned int HEAP_Destroy(HEAP heap)
void HEAP_Free(HEAP heap, SHEAP_Block *ptr)
int HEAP_Serial(const HEAP heap)
HEAP HEAP_AttachFast(const void *base, TNCBI_Size size, int serial)
HEAP HEAP_Attach(const void *base, TNCBI_Size maxsize, int serial)
void *(* FHEAP_Resize)(void *old_base, TNCBI_Size new_size, void *auxarg)
void HEAP_FreeFast(HEAP heap, SHEAP_Block *ptr, const SHEAP_Block *prev)
unsigned int HEAP_AddRef(HEAP heap)
TNCBI_Size HEAP_Idle(const HEAP heap)
HEAP HEAP_Trim(HEAP heap)
unsigned int HEAP_Detach(HEAP heap)
TNCBI_Size HEAP_Size(const HEAP heap)
TNCBI_Size HEAP_Used(const HEAP heap)
enum ENcbiSwitch ESwitch
Aux.
unsigned int TNCBI_Size
Fixed-size analogs of size_t and time_t (mainly for IPC)
unsigned int
A callback function used to compare two keys in a database.
static const CS_INT unused
const struct ncbi::grid::netcache::search::fields::SIZE size
void resize(vector< SMethodDef > &container)
static SHEAP_HeapBlock * s_HEAP_Collect(HEAP heap, TNCBI_Size need)
static SHEAP_HeapBlock * x_HEAP_Walk(const HEAP heap, const SHEAP_Block *ptr)
static SHEAP_HeapBlock * s_HEAP_Walk(const HEAP heap, const SHEAP_Block *ptr)
static SHEAP_Block * s_HEAP_Take(HEAP heap, SHEAP_HeapBlock *b, SHEAP_HeapBlock *n, TNCBI_Size size, TNCBI_Size need, int tail)
#define _HEAP_ALIGN_2(a, b)
#define _HEAP_ALIGN_EX(a, b)
#define HEAP_INDEX(b, base)
static SHEAP_HeapBlock * s_HEAP_Find(HEAP heap, TNCBI_Size need, SHEAP_HeapBlock *hint)
static void s_HEAP_Free(HEAP heap, SHEAP_HeapBlock *p, SHEAP_HeapBlock *b, SHEAP_HeapBlock *n)
static const char * s_HEAP_Id(char *buf, HEAP h)
static void s_HEAP_Link(HEAP heap, SHEAP_HeapBlock *f, SHEAP_HeapBlock *hint)
#define CORE_LOGF_X(subcode, level, fmt_args)
#define CORE_LOG_X(subcode, level, message)
void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)
static SLJIT_INLINE sljit_ins l(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
voidp calloc(uInt items, uInt size)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4