-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( \
- reinterpret_cast<volatile LONG64 *>(ptr), new_val, old_val) == old_val)
-
- #define FACTOR_ATOMIC_ADD(ptr, val) \
- InterlockedAdd64(reinterpret_cast<volatile LONG64 *>(ptr), val)
-
- #define FACTOR_ATOMIC_SUB(ptr, val) \
- InterlockedAdd64(reinterpret_cast<volatile LONG64 *>(ptr), -val)
-
- #else
-
- #define FACTOR_ATOMIC_CAS(ptr, old_val, new_val) \
- (InterlockedCompareExchange( \
- reinterpret_cast<volatile LONG *>(ptr), new_val, old_val) == old_val)
-
- #define FACTOR_ATOMIC_ADD(ptr, val) \
- InterlockedAdd(reinterpret_cast<volatile LONG *>(ptr), val)
-
- #define FACTOR_ATOMIC_SUB(ptr, val) \
- InterlockedAdd(reinterpret_cast<volatile LONG *>(ptr), -val)
-
- #endif
-
- #define FACTOR_MEMORY_BARRIER() \
- MemoryBarrier()
-
-#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)
-
- #define FACTOR_MEMORY_BARRIER() \
- __sync_synchronize()
-
-#else
- #error "Unsupported compiler"
-#endif
+VM_C_API void* factor_memcpy(void* dst, void* src, size_t len);
}