]> gitweb.factorcode.org Git - factor.git/blob - vm/utilities.hpp
help.html: making search box have first tab index
[factor.git] / vm / utilities.hpp
1 namespace factor {
2
3 // Poor mans range-based for loops.
4 #define FACTOR_FOR_EACH(iterable)                               \
5   for (auto iter = (iterable).begin(),    \
6            _end = (iterable).end();                             \
7        iter != _end;                                            \
8        iter++)
9
10 inline static void memset_2(void* dst, uint16_t pattern, size_t size) {
11 #ifdef __APPLE__
12   cell cell_pattern = (pattern | (pattern << 16));
13   memset_pattern4(dst, &cell_pattern, size);
14 #else
15   if (pattern == 0)
16     memset(dst, 0, size);
17   else {
18     uint16_t* start = (uint16_t*)dst;
19     uint16_t* end = (uint16_t*)((cell)dst + size);
20     while (start < end) {
21       *start = pattern;
22       start++;
23     }
24   }
25 #endif
26 }
27
28 inline static void memset_cell(void* dst, cell pattern, size_t size) {
29 #ifdef __APPLE__
30 #ifdef FACTOR_64
31   memset_pattern8(dst, &pattern, size);
32 #else
33   memset_pattern4(dst, &pattern, size);
34 #endif
35 #else
36   if (pattern == 0)
37     memset(dst, 0, size);
38   else {
39     cell* start = (cell*)dst;
40     cell* end = (cell*)((cell)dst + size);
41     while (start < end) {
42       *start = pattern;
43       start++;
44     }
45   }
46 #endif
47 }
48
49 void* fill_function_descriptor(void* ptr, void* code);
50 void* function_descriptor_field(void* ptr, size_t idx);
51
52 vm_char* safe_strdup(const vm_char* str);
53 cell read_cell_hex();
54 VM_C_API void* factor_memcpy(void* dst, void* src, size_t len);
55
56 }