acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
_memory.h
1// Created by camilo on 2022-02-14 10:51 PM <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5CLASS_DECL_ACME const void * memory_find(const void* l, memsize l_len, const void* s, memsize s_len);
6
7
8#if defined(_WIN32) || defined(__BSD__) || defined(__APPLE__)
9
10
11const void * _memory_find(const void * l, memsize l_len, const void * s, memsize s_len);
12
13#else
14
15
16inline const void * _memory_find(const void* l, memsize l_len, const void* s, memsize s_len)
17{
18
19 return memmem(l, l_len, s, s_len);
20
21}
22
23
24#endif
25
26
27inline const void * _memory_find_unsigned_char(const void* l, ::i32 i, memsize len)
28{
29
30 auto u = (::u8) (*((::u32*)(&i)) & 0xff);
31
32 auto p = (const ::u8*)l;
33
34 while(len > 0)
35 {
36
37 if(*p == u)
38 {
39
40 return p;
41
42 }
43
44 p++;
45
46 len--;
47
48 }
49
50 return nullptr;
51
52}
53
54
55
56inline const void * memory_find_unsigned_char(const void* l, ::i32 i, memsize len)
57{
58
59 if(::is_null(l))
60 {
61
62 return nullptr;
63
64 }
65
66 return _memory_find_unsigned_char(l, i, len);
67
68}
69
70
71
72
73#pragma once
74
75
76
77CLASS_DECL_ACME void * memory_set(void * p, ::i32 i, memsize iSize);
78CLASS_DECL_ACME void * memory_and(void * p, const void * point1, const void * point2, memsize iSize);
79CLASS_DECL_ACME void * memory_copy(void * dst, const void * src, memsize iSize);
80CLASS_DECL_ACME void * memory_transfer(void * dst, const void * src, memsize iSize);
81CLASS_DECL_ACME::wide_character * wide_memory_copy(::wide_character * dst, const ::wide_character * src, memsize iSize);
82
83CLASS_DECL_ACME void * reverse_memory(void * p, memsize iSize);
84CLASS_DECL_ACME void * reverse_memory_copy(void * p, const void * point1, memsize iSize);
85
86
87CLASS_DECL_ACME::std::strong_ordering memory_order(const void * sz1, const void * sz2, memsize iSize);
88
89CLASS_DECL_ACME::std::strong_ordering _memory_order(const void * p1, const void * p2, memsize size);
90
91
92#ifdef __cplusplus
93
94
95inline void * zero(void * p, memsize size) { memory_set(p, 0, size); return p; }
96
97
98inline bool is_zero(const void * p, memsize iSize)
99{
100
101 ::u8 * pb = (::u8 *)p;
102
103 while (*pb == '\0' && iSize > 0)
104 {
105
106 pb++;
107
108 iSize--;
109
110 }
111
112 return iSize == 0;
113
114}
115
116
117
118
119//#define zero(array) (::zero(array, sizeof(array)))
120
121
122
123#endif
124
125
126
127
128
129
130
131
132