RNBO: src/RNBO_PlatformInterface.h Source File 1 // 2 // _RNBO_PlatformInterface_H_ 3 // 4 // Created by Rob Sussman on 5/18/16. 5 // 6 // 7 8 #ifndef _RNBO_PlatformInterface_H_ 9 #define _RNBO_PlatformInterface_H_ 10 11 #include "RNBO_Types.h" 12 13 #if !defined(RNBO_PLATFORM_ASSERT_WARN) 14 #ifdef RNBO_DEBUG 15 #define RNBO_PLATFORM_ASSERT_WARN 0 16 #else 17 #define RNBO_PLATFORM_ASSERT_WARN 1 18 #endif 19 #endif 20 21 #if !defined(RNBO_PLATFORM_ERROR_WARN) 22 #ifdef RNBO_DEBUG 23 #define RNBO_PLATFORM_ERROR_WARN 0 24 #else 25 #define RNBO_PLATFORM_ERROR_WARN 1 26 #endif 27 #endif 28 29 30 namespace RNBO { 31 43 class PlatformInterface 44 { 45 46 protected: 47 PlatformInterface() = default; 48 virtual ~PlatformInterface() = default; 49 50 public: 51 void resetWarnings() { 52 #if RNBO_PLATFORM_ERROR_WARN==1 53 mErrorWarned = false; 54 #endif 55 #if RNBO_PLATFORM_ASSERT_WARN==1 56 mAssertWarned = false; 57 #endif 58 } 59 63 virtual void printMessage(const char* message) = 0; 64 70 virtual void printErrorMessage(const char* message) { 71 printMessage(message); 72 } 73 82 virtual void* malloc(size_t bytes) = 0; 83 94 virtual void* calloc(size_t num, size_t size) = 0; 95 106 virtual void* realloc(void* ptr, size_t bytes) = 0; 107 113 virtual void free(void* ptr) = 0; 114 126 virtual void* memcpy(void* dest, const void* src, size_t n) = 0; 127 140 virtual void* memmove(void* dest, const void* src, size_t n) = 0; 141 151 virtual void* memset(void *dest, int value, size_t n) = 0; 152 160 virtual size_t strlen(const char* s) = 0; 161 172 virtual int strcmp(const char* s1, const char* s2) = 0; 173 182 virtual char* strcpy(char* dest, const char* src) = 0; 183 184 // string formatting 185 virtual void toString(char* str, size_t maxlen, number val) = 0; 186 virtual void toString(char* str, size_t maxlen, int val) = 0; 187 virtual void toString(char* str, size_t maxlen, unsigned int val) = 0; 188 virtual void toString(char* str, size_t maxlen, long val) = 0; 189 virtual void toString(char* str, size_t maxlen, long long val) = 0; 190 virtual void toString(char* str, size_t maxlen, unsigned long val) = 0; 191 virtual void toString(char* str, size_t maxlen, unsigned long long val) = 0; 192 virtual void toString(char* str, size_t maxlen, void* val) = 0; 193 194 virtual void abort() = 0; 195 199 virtual void error(RuntimeError e, const char* str) = 0; 200 204 virtual void assertTrue(bool v, const char* str) = 0; 205 206 template <typename T> 207 T errorOrDefault(RuntimeError e, const char* str, T def) { 208 #if RNBO_PLATFORM_ERROR_WARN==1 209 RNBO_UNUSED(e); 210 //warn 211 if (once(mErrorWarned)) { 212 printErrorMessage(str); 213 } 214 #else 215 error(e, str); 216 #endif 217 return def; 218 } 219 220 template <typename T> 221 T assertTrueOrDefault(bool v, const char* str, T def) { 222 #if RNBO_PLATFORM_ASSERT_WARN==1 223 //warn 224 if (!v && once(mAssertWarned)) { 225 printErrorMessage(str); 226 } 227 #else 228 assertTrue(v, str); 229 #endif 230 return def; 231 } 232 private: 233 #if RNBO_PLATFORM_ASSERT_WARN==1 || RNBO_PLATFORM_ERROR_WARN==1 234 bool once(bool& v) { 235 bool have = v; 236 v = true; 237 return !have; 238 } 239 #endif 240 #if RNBO_PLATFORM_ASSERT_WARN==1 241 bool mAssertWarned = false; 242 #endif 243 #if RNBO_PLATFORM_ERROR_WARN==1 244 bool mErrorWarned = false; 245 #endif 246 }; 247 248 } // namespace RNBO 249 250 #endif // #ifndef _RNBO_PlatformInterface_H_