C++ API Reference RNBO: src/RNBO_PlatformInterface.h Source File

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 
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_