agileRTOS (zrtos)  Version 0.8.0 (ghostbuster)
mem.h File Reference
#include <zrtos/types.h>
#include <zrtos/cast.h>
Include dependency graph for mem.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void zrtos_mem__swap (void *dest, void *src, size_t len)
 
void zrtos_mem__swap_ex (void *ptr, size_t offest_dest, size_t offset_src, size_t len)
 
void zrtos_mem__left_rotate (void *ptr, size_t length, size_t buffer_length)
 
void zrtos_mem__move_right_overlapping (void *dest, void *src, size_t length)
 
void zrtos_mem__move_left_overlapping (void *dest, void *src, size_t length)
 
void zrtos_mem__cpy (void *dest, void *src, size_t length)
 
int zrtos_mem__cmp (void *str1, void *str2, size_t count)
 
void zrtos_mem__reverse (void *dest, size_t len)
 
void zrtos_mem__set (void *dest, uint8_t value, size_t len)
 
void zrtos_mem__zero (void *dest, size_t len)
 
void * zrtos_mem__search (const void *key, const void *base, size_t high, size_t size, int(*compar)(const void *, const void *))
 
void zrtos_mem__sort (void *base, size_t nel, size_t width, int(*comp)(const void *, const void *))
 
size_t zrtos_mem__from_hex (void *dest, char *src, size_t len)
 

Function Documentation

◆ zrtos_mem__cmp()

int zrtos_mem__cmp ( void *  str1,
void *  str2,
size_t  count 
)

Definition at line 113 of file mem.h.

113  {
114  uint8_t *s1 = ZRTOS_CAST(uint8_t*,str1);
115  uint8_t *s2 = ZRTOS_CAST(uint8_t*,str2);
116 
117  while(count-- > 0){
118  if(*s1++ != *s2++){
119  return s1[-1] < s2[-1] ? -1 : 1;
120  }
121  }
122 
123  return 0;
124 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
static uint8_t
Definition: mcp2515.h:159
Here is the caller graph for this function:

◆ zrtos_mem__cpy()

void zrtos_mem__cpy ( void *  dest,
void *  src,
size_t  length 
)

Definition at line 105 of file mem.h.

109  {
110  zrtos_mem__move_left_overlapping(dest,src,length);
111 }
void zrtos_mem__move_left_overlapping(void *dest, void *src, size_t length)
Definition: mem.h:92
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_mem__from_hex()

size_t zrtos_mem__from_hex ( void *  dest,
char *  src,
size_t  len 
)

Definition at line 209 of file mem.h.

209  {
210  uint8_t *tmp_dest = ZRTOS_CAST(uint8_t*,dest);
211  while(len--){
212  uint8_t h = (*src++) - '0';
213  uint8_t l = (*src++) - '0';
214 
215  if(h > 9){
216  h -= 'A' - '9';
217  }
218  if(l > 9){
219  l -= 'A' - '9';
220  }
221 
222  *tmp_dest++ = (h << 4) | l;
223  }
224  return zrtos_types__ptr_get_byte_distance(tmp_dest,dest);
225 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
size_t zrtos_types__ptr_get_byte_distance(void *bigger, void *smaller)
Definition: types.h:43
static uint8_t
Definition: mcp2515.h:159
Here is the call graph for this function:

◆ zrtos_mem__left_rotate()

void zrtos_mem__left_rotate ( void *  ptr,
size_t  length,
size_t  buffer_length 
)

Definition at line 50 of file mem.h.

54  {
55  size_t d = length;
56  size_t n = buffer_length;
57  size_t i = d;
58  size_t j = n - d;
59  while(i != j){
60  if(i < j){
61  //A is shorter
62  zrtos_mem__swap_ex(ptr, d - i, d + j - i, i);
63  j -= i;
64  }else{
65  //B is shorter
66  zrtos_mem__swap_ex(ptr, d - i, d, j);
67  i -= j;
68  }
69  }
70  //Finally, block swap A and B
71  zrtos_mem__swap_ex(ptr, d - i, d, i);
72 }
void zrtos_mem__swap_ex(void *ptr, size_t offest_dest, size_t offset_src, size_t len)
Definition: mem.h:37
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_mem__move_left_overlapping()

void zrtos_mem__move_left_overlapping ( void *  dest,
void *  src,
size_t  length 
)

Definition at line 92 of file mem.h.

96  {
97  uint8_t *tmp_dest = ZRTOS_CAST(uint8_t*,dest);
98  uint8_t *tmp_src = ZRTOS_CAST(uint8_t*,src);
99  while(length--){
100  *tmp_dest++ = *tmp_src++;
101  }
102 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
static uint8_t
Definition: mcp2515.h:159
Here is the caller graph for this function:

◆ zrtos_mem__move_right_overlapping()

void zrtos_mem__move_right_overlapping ( void *  dest,
void *  src,
size_t  length 
)

Definition at line 78 of file mem.h.

82  {
83  uint8_t *tmp_dest = ZRTOS_CAST(uint8_t*,dest);
84  uint8_t *tmp_src = ZRTOS_CAST(uint8_t*,src);
85  tmp_dest += --length;
86  tmp_src += length++;
87  while(length--){
88  *tmp_dest-- = *tmp_src--;
89  }
90 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
static uint8_t
Definition: mcp2515.h:159
Here is the caller graph for this function:

◆ zrtos_mem__reverse()

void zrtos_mem__reverse ( void *  dest,
size_t  len 
)

Definition at line 126 of file mem.h.

126  {
127  uint8_t *tmp_dest = ZRTOS_CAST(uint8_t*,dest);
128  uint8_t *tmp_src = tmp_dest + len;
129  len>>=1;
130  while(len--){
131  --tmp_src;
132  ZRTOS_TYPES__SWAP_PTR_CONTENTS(tmp_dest,tmp_src);
133  tmp_dest++;
134  }
135 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
#define ZRTOS_TYPES__SWAP_PTR_CONTENTS(a, b)
Definition: types.h:156
static uint8_t
Definition: mcp2515.h:159
Here is the caller graph for this function:

◆ zrtos_mem__search()

void* zrtos_mem__search ( const void *  key,
const void *  base,
size_t  high,
size_t  size,
int(*)(const void *, const void *)  compar 
)

Definition at line 148 of file mem.h.

150 {
151  register char *p;
152  size_t low;
153  size_t mid;
154  int r;
155 
156  if (size > 0) { /* TODO: change this to an assert?? */
157  low = 0;
158  while (low < high) {
159  mid = low + ((high - low) >> 1); /* Avoid possible overflow here. */
160  p = ((char *)base) + mid * size; /* Could overflow here... */
161  r = (*compar)(key, p); /* but that's an application problem! */
162  if (r > 0) {
163  low = mid + 1;
164  } else if (r < 0) {
165  high = mid;
166  } else {
167  return p;
168  }
169  }
170  }
171  return NULL;
172 }
Here is the caller graph for this function:

◆ zrtos_mem__set()

void zrtos_mem__set ( void *  dest,
uint8_t  value,
size_t  len 
)

Definition at line 137 of file mem.h.

137  {
138  uint8_t *tmp_dest = ZRTOS_CAST(uint8_t*,dest);
139  while(len--){
140  *tmp_dest++ = value;
141  }
142 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
static uint8_t
Definition: mcp2515.h:159
Here is the caller graph for this function:

◆ zrtos_mem__sort()

void zrtos_mem__sort ( void *  base,
size_t  nel,
size_t  width,
int(*)(const void *, const void *)  comp 
)

Definition at line 174 of file mem.h.

178 {
179  size_t wnel, gap, wgap, i, j, k;
180  char *a, *b, tmp;
181 
182  wnel = width * nel;
183  for (gap = 0; ++gap < nel;){
184  gap *= 3;
185  }
186  while ((gap /= 3) != 0) {
187  wgap = width * gap;
188  for (i = wgap; i < wnel; i += width) {
189  for (j = i - wgap; ;j -= wgap) {
190  a = j + (char *)base;
191  b = a + wgap;
192  if ((*comp)(a, b) <= 0){
193  break;
194  }
195  k = width;
196  do {
197  tmp = *a;
198  *a++ = *b;
199  *b++ = tmp;
200  } while (--k);
201  if (j < wgap){
202  break;
203  }
204  }
205  }
206  }
207 }

◆ zrtos_mem__swap()

void zrtos_mem__swap ( void *  dest,
void *  src,
size_t  len 
)

Swap len bytes of dest and src inplace.

Parameters
[in]destdestination
[in]srcsource
[in]lenbyte length to swap
Returns
Nothing

Definition at line 27 of file mem.h.

27  {
28  uint8_t *tmp_dest = ZRTOS_CAST(uint8_t*,dest);
29  uint8_t *tmp_src = ZRTOS_CAST(uint8_t*,src);
30  while(len--){
31  ZRTOS_TYPES__SWAP_PTR_CONTENTS(tmp_src,tmp_dest);
32  tmp_src++;
33  tmp_dest++;
34  }
35 }
#define ZRTOS_CAST(type, value)
Definition: cast.h:18
#define ZRTOS_TYPES__SWAP_PTR_CONTENTS(a, b)
Definition: types.h:156
static uint8_t
Definition: mcp2515.h:159
Here is the caller graph for this function:

◆ zrtos_mem__swap_ex()

void zrtos_mem__swap_ex ( void *  ptr,
size_t  offest_dest,
size_t  offset_src,
size_t  len 
)

Definition at line 37 of file mem.h.

42  {
44  zrtos_types__ptr_add(ptr,offest_dest)
45  ,zrtos_types__ptr_add(ptr,offset_src)
46  ,len
47  );
48 }
void zrtos_mem__swap(void *dest, void *src, size_t len)
Swap len bytes of dest and src inplace.
Definition: mem.h:27
void * zrtos_types__ptr_add(void *ptr, size_t byte_len)
Definition: types.h:35
Here is the call graph for this function:
Here is the caller graph for this function:

◆ zrtos_mem__zero()

void zrtos_mem__zero ( void *  dest,
size_t  len 
)

Definition at line 144 of file mem.h.

144  {
145  zrtos_mem__set(dest,0,len);
146 }
void zrtos_mem__set(void *dest, uint8_t value, size_t len)
Definition: mem.h:137
Here is the call graph for this function:
Here is the caller graph for this function: