/// This function verifies single page - buffer already loaded in memory void TPgBlob::VerifyPage(char* Pg) { TPgHeader* Header = (TPgHeader*)Pg; for (uint16 i = 0; i < Header->ItemCount; i++) { TPgBlobPageItem* Item = GetItemRec(Pg, i); if (Item->Len == 0) continue; // theoretically, this should not be needed, but there seems to be some scenario where it falls through if (Item->Offset < Header->OffsetFreeEnd) { PrintHeaderInfo(Pg); EAssertR(false, "Invalid position of item - starts inside free space of a page"); } if (Item->Offset + Item->Len > PG_PAGE_SIZE) { PrintHeaderInfo(Pg); EAssertR(false, "Invalid position of item - stretches over page"); } } for (uint16 i = 0; i < Header->ItemCount; i++) { TPgBlobPageItem* Item1 = GetItemRec(Pg, i); for (uint16 j = i + 1; j < Header->ItemCount; j++) { TPgBlobPageItem* Item2 = GetItemRec(Pg, j); if (Item1->Len == 0 || Item2->Len == 0) continue; if ((Item1->Offset < Item2->Offset) && (Item1->Offset + Item1->Len > Item2->Offset)) { PrintHeaderInfo(Pg); printf("--Len1 %d, Offset1 %d, Len2 %d, Offset2 %d\n", Item1->Len, Item1->Offset, Item2->Len, Item2->Offset); EAssertR(false, "Invalid position of item - items overlap"); } if ((Item2->Offset < Item1->Offset) && (Item2->Offset + Item2->Len > Item1->Offset)) { PrintHeaderInfo(Pg); printf("-Len1 %d, Offset1 %d, Len2 %d, Offset2 %d\n", Item1->Len, Item1->Offset, Item2->Len, Item2->Offset); EAssertR(false, "Invalid position of item - items overlap"); } } } }
void TopListPrint(TopList_T* topList) { while (topList->size > 0 && topList->List[0].value <= 0) { HeapPop(topList); } printf(" Get The Top %d List. \n\n", topList->size); PrintHeaderInfo(topList->size); while (topList->size > 0 && topList->List[0].value >0) { PrintCombinStat(&topList->List[0]); HeapPop(topList); } }