8#ifndef MMGR_STRING_SHIM_H
9#define MMGR_STRING_SHIM_H
12#include "config/mmgr_config.h"
23#define MMGR_STR_MAX MMGR_CARCER_MAX
41#ifndef _STRING_H_INCLUDED
42#define _STRING_H_INCLUDED 1
59MMGR_INLINE
void *mmgr_shim_cpy(
void *dest,
const void *source,
size_t bytes)
61 MMGR_CALL(memor.cpy,
MemoriaCfg, .
dst = dest, .src = source, .bytes = bytes);
75MMGR_INLINE
void *mmgr_shim_move(
void *dest,
const void *source,
size_t bytes)
77 if ((
const uint8_t *)dest <= (
const uint8_t *)source)
79 MMGR_CALL(memor.move_down,
MemoriaCfg, .
dst = dest, .src = source, .bytes = bytes);
83 MMGR_CALL(memor.move_up,
MemoriaCfg, .
dst = dest, .src = source, .bytes = bytes);
97MMGR_INLINE
void *mmgr_shim_set(
void *dest, mmgr_iword value,
size_t bytes)
99 MMGR_CALL(memor.set,
MemoriaCfg, .
dst = dest, .val = (uint8_t)value, .bytes = bytes);
112MMGR_INLINE mmgr_iword mmgr_shim_cmp(
const void *left,
const void *right,
size_t bytes)
114 return MMGR_CALL(memor.cmp,
MemoriaCfg, .
src = left, .other = right, .bytes = bytes);
126MMGR_INLINE
void *mmgr_shim_chr(
const void *region, mmgr_iword value,
size_t bytes)
128 return (
void *)(size_t)MMGR_CALL(memor.chr,
MemoriaCfg, .
src = region, .bytes = bytes, .val = (uint8_t)value);
136#define memcpy(dest, source, bytes) mmgr_shim_cpy((dest), (source), (bytes))
141#define memmove(dest, source, bytes) mmgr_shim_move((dest), (source), (bytes))
146#define memset(dest, value, bytes) mmgr_shim_set((dest), (value), (bytes))
153#define memcmp(left, right, bytes) mmgr_shim_cmp((left), (right), (bytes))
158#define memchr(region, value, bytes) mmgr_shim_chr((region), (value), (bytes))
165#define strlen(text) MMGR_CALL(cellul.len, CatenaFinitaCfg, .src = (text), .cap = MMGR_STR_MAX)
172#define strnlen(text, limit) MMGR_CALL(cellul.len, CatenaFinitaCfg, .src = (text), .cap = (limit))
180#define strstr(haystack, needle) \
181 ((char *)(size_t)MMGR_CALL(cellul.find, CatenaFinitaCfg, .src = (haystack), .cap = MMGR_STR_MAX, \
182 .other = (needle), .other_cap = MMGR_STR_MAX, .ci = MMGR_FALSE))
190#define strcasestr(haystack, needle) \
191 ((char *)(size_t)MMGR_CALL(cellul.find, CatenaFinitaCfg, .src = (haystack), .cap = MMGR_STR_MAX, \
192 .other = (needle), .other_cap = MMGR_STR_MAX, .ci = MMGR_TRUE))
200#define strcmp(left, right) \
201 (!MMGR_CALL(cellul.eq, CatenaFinitaCfg, .src = (left), .other = (right), .cap = MMGR_STR_MAX, .ci = MMGR_FALSE))
209#define strcasecmp(left, right) \
210 (!MMGR_CALL(cellul.eq, CatenaFinitaCfg, .src = (left), .other = (right), .cap = MMGR_STR_MAX, .ci = MMGR_TRUE))
219#define strncmp(left, right, limit) \
220 (MMGR_CALL(cellul.diff, CatenaFinitaCfg, .src = (left), .other = (right), .cap = (limit), .ci = MMGR_FALSE) < \
230#define strncasecmp(left, right, limit) \
231 (MMGR_CALL(cellul.diff, CatenaFinitaCfg, .src = (left), .other = (right), .cap = (limit), .ci = MMGR_TRUE) < \
239#define strlcpy(dest, source, limit) \
240 MMGR_CALL(cellul.copy, CatenaFinitaCfg, .dst = (dest), .src = (source), .cap = (limit))
249#define strchr(text, value) \
250 ((char *)(size_t)MMGR_CALL(cellul.chr, CatenaFinitaCfg, .src = (text), .cap = MMGR_STR_MAX, \
251 .byte = (uint8_t)(value)))
Bounded string work: the three argument types, the calls, and the cellul dispatch table.
Byte-level memory work: its arguments, the calls, and the memor dispatch table.
Arguments for the memor calls.