void MemoryPool::clear() { if (!delayed.empty()) { MemoryPoolStatus status; restore(status); checkAssert(delayed.empty()); } }
void* MemoryPool::alloc(size_t size, char alignOn, MemoryPoolItem** poolPtr) { MemoryPoolItem* i = new (malloc(sizeof(MemoryPoolItem))) MemoryPoolItem(); checkAssert(i); i->func = free; i->data = malloc(size); delayed.push_back(i); if (poolPtr) *poolPtr = i; return i->data; }
int MemoryPool::vprintf(char** strPtr, size_t max, const char* format, va_list ap) { char* str = (char*)alloc(max); checkAssert(str); int size = vsnprintf(str, max, format, ap); if (size >= ssize_t(max)) { str[max-1] = '\0'; } if (strPtr != NULL) *strPtr = str; return size; }
void check(const char code[], const char *filename = "test.cpp") { // Clear the error buffer.. errout.str(""); // Tokenize.. Tokenizer tokenizer(&settings, this); std::istringstream istr(code); tokenizer.tokenize(istr, filename); // Check.. CheckAssert checkAssert(&tokenizer, &settings, this); checkAssert.runSimplifiedChecks(&tokenizer, &settings, this); }
void MemoryPool::restore(MemoryPoolStatus status) { Queue<MemoryPoolItem*> toBeFreed; // pass 1, execute delayed items while (!delayed.empty() && delayed.back() != status.delayed) { MemoryPoolItem* c = delayed.pop(); if (c->func != NULL) (c->func)(c->data); toBeFreed.push_back(c); } checkAssert(!delayed.empty() || status.delayed == nullptr); // pass 2, free allocated memory while (MemoryPoolItem* c = toBeFreed.pop_front()) free(c); }
int main(int argc, char *argv[]){ int numPlayers = 2; int cards[] = {smithy,adventurer,gardens,embargo,cutpurse,mine, ambassador,outpost,baron,tribute}; struct gameState game; struct gameState *state = &game; initializeGame(numPlayers, cards, 2468, state); int smithyResult = cardEffect(smithy, NULL, NULL, NULL, state, NULL, NULL); Assert((smithyResult == 0), "SMITHY CARD."); checkAssert(); return 0; }
void check( const char code[], const char *filename = NULL) { // Clear the error buffer.. errout.str(""); Settings settings; settings.addEnabled("style"); settings.addEnabled("warning"); settings.addEnabled("portability"); settings.addEnabled("performance"); // Tokenize.. Tokenizer tokenizer(&settings, this); std::istringstream istr(code); tokenizer.tokenize(istr, filename ? filename : "test.cpp"); // Check.. CheckAssert checkAssert(&tokenizer, &settings, this); checkAssert.runSimplifiedChecks(&tokenizer, &settings, this); }