Aussie AI
Example: memset Wrapper Self-Checks
-
Book Excerpt from "Generative AI in C++"
-
by David Spuler, Ph.D.
Example: memset Wrapper Self-Checks
Here's an example of what you can do in a wrapper function
called “memset_wrapper
”
from one of the Aussie AI projects:
void *memset_wrapper(void *dest, int val, int sz) // Wrap memset { if (dest == NULL) { yassert2(dest != NULL, "memset null dest"); return NULL; } if (sz < 0) { // Why we have "int sz" not "size_t sz" above yassert2(sz >= 0, "memset size negative"); return dest; // fail } if (sz == 0) { yassert2(sz != 0, "memset zero size (reorder params?)"); return dest; } if (sz <= sizeof(void*)) { // Suspiciously small size yassert2(sz > sizeof(void*), "memset with sizeof array parameter?"); // Allow it, keep going } if (val >= 256) { yassert2(val < 256, "memset value not char"); return dest; // fail } void* sret = ::memset(dest, val, sz); // Call real one! return sret; }
It's a judgement call whether or not to leave the debug wrappers in place, in the vein of speed versus safety. Do you prefer sprinting to make your flight, or arriving two hours early? Here's one way to remove the wrapper functions completely with the preprocessor if you've been manually changing them to the wrapper names:
#if YDEBUG // Debug mode, leave wrappers.. #else // Production (remove them all) #define memset_wrapper memset //... others #endif
• Next: • Up: Table of Contents |
The new AI programming book by Aussie AI co-founders:
Get your copy from Amazon: Generative AI in C++ |