php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
mraw.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2018 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
7#ifndef LEXBOR_MRAW_H
8#define LEXBOR_MRAW_H
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14#include <string.h>
15
16#include "lexbor/core/base.h"
17#include "lexbor/core/mem.h"
18#include "lexbor/core/bst.h"
19
20
21#define lexbor_mraw_meta_size() \
22 (((sizeof(size_t) % LEXBOR_MEM_ALIGN_STEP) != 0) \
23 ? sizeof(size_t) \
24 + (LEXBOR_MEM_ALIGN_STEP - (sizeof(size_t) % LEXBOR_MEM_ALIGN_STEP)) \
25 : sizeof(size_t))
26
27
28typedef struct {
31 size_t ref_count;
32}
34
35
38
40lexbor_mraw_init(lexbor_mraw_t *mraw, size_t chunk_size);
41
42LXB_API void
44
46lexbor_mraw_destroy(lexbor_mraw_t *mraw, bool destroy_self);
47
48
49LXB_API void *
51
52LXB_API void *
54
55LXB_API void *
56lexbor_mraw_realloc(lexbor_mraw_t *mraw, void *data, size_t new_size);
57
58LXB_API void *
60
61
62/*
63 * Inline functions
64 */
65lxb_inline size_t
67{
68 return *((size_t *) (((uint8_t *) data) - lexbor_mraw_meta_size()));
69}
70
71lxb_inline void
73{
74 data = (((uint8_t *) data) - lexbor_mraw_meta_size());
75 memcpy(data, &size, sizeof(size_t));
76}
77
78lxb_inline void *
79lexbor_mraw_dup(lexbor_mraw_t *mraw, const void *src, size_t size)
80{
81 void *data = lexbor_mraw_alloc(mraw, size);
82
83 if (data != NULL) {
84 memcpy(data, src, size);
85 }
86
87 return data;
88}
89
90lxb_inline size_t
92{
93 return mraw->ref_count;
94}
95
96
97/*
98 * No inline functions for ABI.
99 */
100LXB_API size_t
102
103LXB_API void
105
106LXB_API void *
107lexbor_mraw_dup_noi(lexbor_mraw_t *mraw, const void *src, size_t size);
108
109
110#ifdef __cplusplus
111} /* extern "C" */
112#endif
113
114#endif /* LEXBOR_MRAW_H */
struct lexbor_bst lexbor_bst_t
Definition bst.h:25
#define LXB_API
Definition def.h:48
new_type size
Definition ffi.c:4365
memcpy(ptr1, ptr2, size)
#define NULL
Definition gdcache.h:45
struct lexbor_mem lexbor_mem_t
Definition mem.h:20
LXB_API lexbor_mraw_t * lexbor_mraw_create(void)
Definition mraw.c:32
LXB_API void * lexbor_mraw_realloc(lexbor_mraw_t *mraw, void *data, size_t new_size)
Definition mraw.c:315
LXB_API void * lexbor_mraw_calloc(lexbor_mraw_t *mraw, size_t size)
Definition mraw.c:227
LXB_API lexbor_mraw_t * lexbor_mraw_destroy(lexbor_mraw_t *mraw, bool destroy_self)
Definition mraw.c:87
#define lexbor_mraw_meta_size()
Definition mraw.h:21
LXB_API void * lexbor_mraw_alloc(lexbor_mraw_t *mraw, size_t size)
Definition mraw.c:180
lxb_inline size_t lexbor_mraw_data_size(void *data)
Definition mraw.h:66
lxb_inline size_t lexbor_mraw_reference_count(lexbor_mraw_t *mraw)
Definition mraw.h:91
LXB_API size_t lexbor_mraw_data_size_noi(void *data)
Definition mraw.c:413
lxb_inline void * lexbor_mraw_dup(lexbor_mraw_t *mraw, const void *src, size_t size)
Definition mraw.h:79
LXB_API void * lexbor_mraw_dup_noi(lexbor_mraw_t *mraw, const void *src, size_t size)
Definition mraw.c:425
LXB_API void * lexbor_mraw_free(lexbor_mraw_t *mraw, void *data)
Definition mraw.c:392
lxb_inline void lexbor_mraw_data_size_set(void *data, size_t size)
Definition mraw.h:72
LXB_API void lexbor_mraw_data_size_set_noi(void *data, size_t size)
Definition mraw.c:419
LXB_API void lexbor_mraw_clean(lexbor_mraw_t *mraw)
Definition mraw.c:76
LXB_API lxb_status_t lexbor_mraw_init(lexbor_mraw_t *mraw, size_t chunk_size)
Definition mraw.c:38
zend_constant * data
size_t ref_count
Definition mraw.h:31
lexbor_bst_t * cache
Definition mraw.h:30
lexbor_mem_t * mem
Definition mraw.h:29
unsigned int lxb_status_t
Definition types.h:28
#define lxb_inline
Definition types.h:21