aboutsummaryrefslogtreecommitdiff
path: root/dep/include/g3dlite/G3D/System.h
diff options
context:
space:
mode:
Diffstat (limited to 'dep/include/g3dlite/G3D/System.h')
-rw-r--r--dep/include/g3dlite/G3D/System.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/dep/include/g3dlite/G3D/System.h b/dep/include/g3dlite/G3D/System.h
new file mode 100644
index 00000000000..507b44670da
--- /dev/null
+++ b/dep/include/g3dlite/G3D/System.h
@@ -0,0 +1,122 @@
+/**
+ @file System.h
+
+ @maintainer Morgan McGuire, matrix@graphics3d.com
+
+ @cite Rob Wyatt http://www.gamasutra.com/features/wyatts_world/19990709/processor_detection_01.htm
+ @cite Benjamin Jurke http://www.flipcode.com/cgi-bin/msg.cgi?showThread=COTD-ProcessorDetectionClass&forum=cotd&id=-1
+ @cite Michael Herf http://www.stereopsis.com/memcpy.html
+
+ @created 2003-01-25
+ @edited 2006-04-26
+ */
+
+#ifndef G3D_SYSTEM_H
+#define G3D_SYSTEM_H
+
+#include "G3D/platform.h"
+#include "G3D/g3dmath.h"
+#include <string>
+
+#ifdef G3D_OSX
+# include <CoreServices/CoreServices.h>
+#endif
+
+
+namespace G3D {
+
+typedef double RealTime;
+
+class System {
+public:
+
+ /** Called automatically by the other System routines.*/
+ static void init();
+
+ /**
+ Guarantees that the start of the array is aligned to the
+ specified number of bytes.
+ */
+ static void* alignedMalloc(size_t bytes, size_t alignment);
+
+ /**
+ Uses pooled storage to optimize small allocations (1 byte to 5 kilobytes).
+ Can be 10x to 100x faster than calling ::malloc or new.
+
+ The result must be freed with free.
+
+ Threadsafe on Win32.
+
+ @sa calloc realloc OutOfMemoryCallback free
+ */
+ static void* malloc(size_t bytes);
+
+ static void* calloc(size_t n, size_t x);
+
+ /**
+ @param size Size of memory that the system was trying to allocate
+ @param recoverable If true, the system will attempt to allocate again
+ if the callback returns true. If false, malloc is going to return
+ NULL and this invocation is just to notify the application.
+ @return Return true to force malloc to attempt allocation again if the
+ error was recoverable.
+ */
+ typedef bool (*OutOfMemoryCallback)(size_t size, bool recoverable);
+
+ /**
+ When System::malloc fails to allocate memory because the system is
+ out of memory, it invokes this handler (if it is not NULL).
+ The argument to the callback is the amount of memory that malloc
+ was trying to allocate when it ran out. If the callback returns
+ true, System::malloc will attempt to allocate the memory again.
+ If the callback returns false, then System::malloc will return NULL.
+
+ You can use outOfMemoryCallback to free data structures or to
+ register the failure.
+ */
+ static OutOfMemoryCallback outOfMemoryCallback;
+
+ /**
+ Version of realloc that works with System::malloc.
+ */
+ static void* realloc(void* block, size_t bytes);
+
+ /** Returns a string describing how well System::malloc is using its internal pooled storage.
+ "heap" memory was slow to allocate; the other data sizes are comparatively fast.*/
+ static std::string mallocPerformance();
+ static void resetMallocPerformanceCounters();
+
+ /**
+ Returns a string describing the current usage of the buffer pools used for
+ optimizing System::malloc.
+ */
+ static std::string mallocStatus();
+
+ /**
+ Free data allocated with System::malloc.
+
+ Threadsafe on Win32.
+ */
+ static void free(void* p);
+
+ /**
+ Frees memory allocated with alignedMalloc.
+ */
+ static void alignedFree(void* ptr);
+
+ /** An implementation of memcpy that may be up to 2x as fast as the C library
+ one on some processors. Guaranteed to have the same behavior as memcpy
+ in all cases. */
+ static void memcpy(void* dst, const void* src, size_t numBytes);
+
+ /** An implementation of memset that may be up to 2x as fast as the C library
+ one on some processors. Guaranteed to have the same behavior as memset
+ in all cases. */
+ static void memset(void* dst, uint8 value, size_t numBytes);
+
+};
+
+
+} // namespace
+
+#endif