]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/utilities.hpp
io.streams.256color: faster by caching styles
[factor.git] / vm / utilities.hpp
old mode 100755 (executable)
new mode 100644 (file)
index 2b93a62..9e7de0b
@@ -1,97 +1,56 @@
-namespace factor
-{
+namespace factor {
 
-inline static void memset_2(void *dst, u16 pattern, size_t size)
-{
+// Poor mans range-based for loops.
+#define FACTOR_FOR_EACH(iterable)                               \
+  for (auto iter = (iterable).begin(),    \
+           _end = (iterable).end();                             \
+       iter != _end;                                            \
+       iter++)
+
+inline static void memset_2(void* dst, uint16_t pattern, size_t size) {
 #ifdef __APPLE__
-       cell cell_pattern = (pattern | (pattern << 16));
-       memset_pattern4(dst,&cell_pattern,size);
+  cell cell_pattern = (pattern | (pattern << 16));
+  memset_pattern4(dst, &cell_pattern, size);
 #else
-       if(pattern == 0)
-               memset(dst,0,size);
-       else
-       {
-               u16 *start = (u16 *)dst;
-               u16 *end = (u16 *)((cell)dst + size);
-               while(start < end)
-               {
-                       *start = pattern;
-                       start++;
-               }
-       }
+  if (pattern == 0)
+    memset(dst, 0, size);
+  else {
+    uint16_t* start = (uint16_t*)dst;
+    uint16_t* end = (uint16_t*)((cell)dst + size);
+    while (start < end) {
+      *start = pattern;
+      start++;
+    }
+  }
 #endif
 }
 
-inline static void memset_cell(void *dst, cell pattern, size_t size)
-{
+inline static void memset_cell(void* dst, cell pattern, size_t size) {
 #ifdef __APPLE__
-       #ifdef FACTOR_64
-               memset_pattern8(dst,&pattern,size);
-       #else
-               memset_pattern4(dst,&pattern,size);
-       #endif
+#ifdef FACTOR_64
+  memset_pattern8(dst, &pattern, size);
+#else
+  memset_pattern4(dst, &pattern, size);
+#endif
 #else
-       if(pattern == 0)
-               memset(dst,0,size);
-       else
-       {
-               cell *start = (cell *)dst;
-               cell *end = (cell *)((cell)dst + size);
-               while(start < end)
-               {
-                       *start = pattern;
-                       start++;
-               }
-       }
+  if (pattern == 0)
+    memset(dst, 0, size);
+  else {
+    cell* start = (cell*)dst;
+    cell* end = (cell*)((cell)dst + size);
+    while (start < end) {
+      *start = pattern;
+      start++;
+    }
+  }
 #endif
 }
 
-void *fill_function_descriptor(void *ptr, void *code);
-void *function_descriptor_field(void *ptr, size_t idx);
+void* fill_function_descriptor(void* ptr, void* code);
+void* function_descriptor_field(void* ptr, size_t idx);
 
-vm_char *safe_strdup(const vm_char *str);
+vm_char* safe_strdup(const vm_char* str);
 cell read_cell_hex();
-VM_C_API void *factor_memcpy(void *dst, void *src, size_t len);
-
-#if defined(WINDOWS)
-
-       #if defined(FACTOR_64)
-
-               #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
-                       (InterlockedCompareExchange64(ptr, new_val, old_val) == old_val)
-
-               #define FACTOR_ATOMIC_ADD(ptr, val) \
-                       InterlockedAdd64(ptr, val)
-
-               #define FACTOR_ATOMIC_SUB(ptr, val) \
-                       InterlockedSub64(ptr, val)
-
-       #else
-
-               #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
-                       (InterlockedCompareExchange(ptr, new_val, old_val) == old_val)
-
-               #define FACTOR_ATOMIC_ADD(ptr, val) \
-                       InterlockedAdd(ptr, val)
-
-               #define FACTOR_ATOMIC_SUB(ptr, val) \
-                       InterlockedSub(ptr, val)
-
-       #endif
-
-#elif defined(__GNUC__) || defined(__clang__)
-
-       #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
-               __sync_bool_compare_and_swap(ptr, old_val, new_val)
-
-       #define FACTOR_ATOMIC_ADD(ptr, val) \
-               __sync_add_and_fetch(ptr, val)
-
-       #define FACTOR_ATOMIC_SUB(ptr, val) \
-               __sync_sub_and_fetch(ptr, val)
-
-#else
-       #error "Unsupported compiler"
-#endif
+VM_C_API void* factor_memcpy(void* dst, void* src, size_t len);
 
 }