php-internal-docs 8.4.8
Unofficial docs for php/php-src
Loading...
Searching...
No Matches
tag.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2018-2019 Alexander Borisov
3 *
4 * Author: Alexander Borisov <borisov@lexbor.com>
5 */
6
7#include "lexbor/tag/tag.h"
8
9#include "lexbor/tag/res.h"
10
11
14 const lxb_char_t *name, size_t length)
15{
17 const lexbor_shs_entry_t *entry;
18
19 entry = lexbor_shs_entry_get_static(lxb_tag_res_shs_data_default,
20 name, length);
21 if (entry != NULL) {
22 return entry->value;
23 }
24
26 if (data == NULL) {
27 return NULL;
28 }
29
30 if (tag_id == LXB_TAG__UNDEF) {
31 data->tag_id = (lxb_tag_id_t) data;
32 }
33 else {
34 data->tag_id = tag_id;
35 }
36
37 return data;
38}
39
42{
44 const lexbor_shs_entry_t *entry;
45
46 entry = lexbor_shs_entry_get_lower_static(lxb_tag_res_shs_data_default,
47 name, length);
48 if (entry != NULL) {
49 return entry->value;
50 }
51
53 if (data == NULL) {
54 return NULL;
55 }
56
57 data->tag_id = (lxb_tag_id_t) data;
58
59 return data;
60}
61
62const lxb_tag_data_t *
64{
65 if (tag_id >= LXB_TAG__LAST_ENTRY) {
66 if (tag_id == LXB_TAG__LAST_ENTRY) {
67 return NULL;
68 }
69
70 return (const lxb_tag_data_t *) tag_id;
71 }
72
73 return &lxb_tag_res_data_default[tag_id];
74}
75
76const lxb_tag_data_t *
78{
79 const lexbor_shs_entry_t *entry;
80
81 if (name == NULL || len == 0) {
82 return NULL;
83 }
84
85 entry = lexbor_shs_entry_get_lower_static(lxb_tag_res_shs_data_default,
86 name, len);
87 if (entry != NULL) {
88 return (const lxb_tag_data_t *) entry->value;
89 }
90
91 return (const lxb_tag_data_t *) lexbor_hash_search(hash,
93}
94
95#if 0
96const lxb_tag_data_t *
98 const lxb_char_t *name, size_t len)
99{
100 uintptr_t dif;
101 const lexbor_shs_entry_t *entry;
102
103 if (name == NULL || len == 0) {
104 return NULL;
105 }
106
107 entry = lexbor_shs_entry_get_upper_static(lxb_tag_res_shs_data_default,
108 name, len);
109 if (entry != NULL) {
110 dif = (const lxb_tag_data_t *) entry->value - lxb_tag_res_data_default;
111
112 return (const lxb_tag_data_t *) (lxb_tag_res_data_upper_default + dif);
113 }
114
115 return (const lxb_tag_data_t *) lexbor_hash_search(hash,
117}
118#endif
119
120/*
121 * No inline functions for ABI.
122 */
123const lxb_char_t *
125{
126 return lxb_tag_name_by_id(tag_id, len);
127}
128
129const lxb_char_t *
131{
132 return lxb_tag_name_upper_by_id(tag_id, len);
133}
134
140
size_t len
Definition apprentice.c:174
#define LXB_API
Definition def.h:48
LXB_API const lexbor_hash_search_t * lexbor_hash_search_lower
Definition hash.c:66
LXB_API const lexbor_hash_insert_t * lexbor_hash_insert_lower
Definition hash.c:41
void * lexbor_hash_insert(lexbor_hash_t *hash, const lexbor_hash_insert_t *insert, const lxb_char_t *key, size_t length)
Definition hash.c:186
LXB_API const lexbor_hash_search_t * lexbor_hash_search_upper
Definition hash.c:69
LXB_API const lexbor_hash_insert_t * lexbor_hash_insert_raw
Definition hash.c:38
void * lexbor_hash_search(lexbor_hash_t *hash, const lexbor_hash_search_t *search, const lxb_char_t *key, size_t length)
Definition hash.c:274
#define NULL
Definition gdcache.h:45
struct lexbor_hash lexbor_hash_t
Definition hash.h:41
hash(string $algo, string $data, bool $binary=false, array $options=[])
Definition hash.stub.php:12
zend_constant * data
const lexbor_shs_entry_t * lexbor_shs_entry_get_upper_static(const lexbor_shs_entry_t *root, const lxb_char_t *key, size_t key_len)
Definition shs.c:92
const lexbor_shs_entry_t * lexbor_shs_entry_get_static(const lexbor_shs_entry_t *root, const lxb_char_t *key, size_t key_len)
Definition shs.c:34
const lexbor_shs_entry_t * lexbor_shs_entry_get_lower_static(const lexbor_shs_entry_t *root, const lxb_char_t *key, size_t key_len)
Definition shs.c:63
Definition shs.h:19
void * value
Definition shs.h:21
@ LXB_TAG__LAST_ENTRY
Definition const.h:220
@ LXB_TAG__UNDEF
Definition const.h:24
uintptr_t lxb_tag_id_t
Definition const.h:21
lxb_inline lexbor_mraw_t * lxb_tag_mraw(lexbor_hash_t *hash)
Definition tag.h:94
lxb_inline lxb_tag_id_t lxb_tag_id_by_name(lexbor_hash_t *hash, const lxb_char_t *name, size_t len)
Definition tag.h:83
LXB_API const lxb_tag_data_t * lxb_tag_data_by_name_upper(lexbor_hash_t *hash, const lxb_char_t *name, size_t len)
lxb_inline const lxb_char_t * lxb_tag_name_by_id(lxb_tag_id_t tag_id, size_t *len)
Definition tag.h:45
lxb_inline const lxb_char_t * lxb_tag_name_upper_by_id(lxb_tag_id_t tag_id, size_t *len)
Definition tag.h:64
LXB_API const lxb_tag_data_t * lxb_tag_append_lower(lexbor_hash_t *hash, const lxb_char_t *name, size_t length)
Definition tag.c:41
lxb_tag_id_t lxb_tag_id_by_name_noi(lexbor_hash_t *hash, const lxb_char_t *name, size_t len)
Definition tag.c:136
const lxb_tag_data_t * lxb_tag_data_by_name(lexbor_hash_t *hash, const lxb_char_t *name, size_t len)
Definition tag.c:77
const lxb_char_t * lxb_tag_name_by_id_noi(lxb_tag_id_t tag_id, size_t *len)
Definition tag.c:124
lexbor_mraw_t * lxb_tag_mraw_noi(lexbor_hash_t *hash)
Definition tag.c:142
LXB_API const lxb_tag_data_t * lxb_tag_append(lexbor_hash_t *hash, lxb_tag_id_t tag_id, const lxb_char_t *name, size_t length)
Definition tag.c:13
const lxb_tag_data_t * lxb_tag_data_by_id(lxb_tag_id_t tag_id)
Definition tag.c:63
const lxb_char_t * lxb_tag_name_upper_by_id_noi(lxb_tag_id_t tag_id, size_t *len)
Definition tag.c:130
unsigned char lxb_char_t
Definition types.h:27
zend_string * name