• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef ARK_WEB_TYPES_H_
17 #define ARK_WEB_TYPES_H_
18 #pragma once
19 
20 #include <list>
21 #include <map>
22 #include <math.h>
23 #include <string>
24 #include <vector>
25 
26 #include "base/include/ark_web_macros.h"
27 #include "base/include/ark_web_memory.h"
28 #include "base/include/ark_web_scoped_refptr.h"
29 
30 template<class T>
31 using ArkWebRefPtr = ark_web_scoped_refptr<T>;
32 
33 typedef struct {
34     int size;
35     char* value;
36 
37     ArkWebMemFreeFunc ark_web_mem_free_func;
38 } ArkWebCharVector;
39 
40 const ArkWebCharVector ark_web_char_vector_default = {
41     0,
42 };
43 
44 typedef struct {
45     int size;
46     uint8_t* value;
47 
48     ArkWebMemFreeFunc ark_web_mem_free_func;
49 } ArkWebUint8Vector;
50 
51 const ArkWebUint8Vector ark_web_uint8_vector_default = {
52     0,
53 };
54 
55 typedef struct {
56     int size;
57     uint16_t* value;
58 
59     ArkWebMemFreeFunc ark_web_mem_free_func;
60 } ArkWebUint16Vector;
61 
62 const ArkWebUint16Vector ark_web_uint16_vector_default = {
63     0,
64 };
65 
66 typedef struct {
67     int size;
68     int32_t* value;
69 
70     ArkWebMemFreeFunc ark_web_mem_free_func;
71 } ArkWebInt32Vector;
72 
73 const ArkWebInt32Vector ark_web_int32_vector_default = {
74     0,
75 };
76 
77 typedef struct {
78     int size;
79     int64_t* value;
80 
81     ArkWebMemFreeFunc ark_web_mem_free_func;
82 } ArkWebInt64Vector;
83 
84 const ArkWebInt64Vector ark_web_int64_vector_default = {
85     0,
86 };
87 
88 typedef struct {
89     int size;
90     uint32_t* value;
91 
92     ArkWebMemFreeFunc ark_web_mem_free_func;
93 } ArkWebUint32Vector;
94 
95 const ArkWebUint32Vector ark_web_uint32_vector_default = {
96     0,
97 };
98 
99 typedef struct {
100     int size;
101     double* value;
102 
103     ArkWebMemFreeFunc ark_web_mem_free_func;
104 } ArkWebDoubleVector;
105 
106 const ArkWebDoubleVector ark_web_double_vector_default = {
107     0,
108 };
109 
110 typedef struct {
111     int size;
112     bool* value;
113 
114     ArkWebMemFreeFunc ark_web_mem_free_func;
115 } ArkWebBooleanVector;
116 
117 const ArkWebBooleanVector ark_web_boolean_vector_default = {
118     0,
119 };
120 
121 typedef struct {
122     int size;
123     int32_t* value;
124 
125     ArkWebMemFreeFunc ark_web_mem_free_func;
126 } ArkWebInt32List;
127 
128 const ArkWebInt32List ark_web_int32_list_default = {
129     0,
130 };
131 
132 typedef struct {
133     int size;
134     char* value;
135 
136     ArkWebMemFreeFunc ark_web_mem_free_func;
137 } ArkWebString;
138 
139 const ArkWebString ark_web_string_default = {
140     0,
141 };
142 
143 typedef struct {
144     int size;
145     char16_t* value;
146 
147     ArkWebMemFreeFunc ark_web_mem_free_func;
148 } ArkWebU16String;
149 
150 const ArkWebU16String ark_web_u16string_default = {
151     0,
152 };
153 
154 typedef struct {
155     int size;
156     ArkWebString* key;
157     ArkWebString* value;
158 
159     ArkWebMemFreeFunc ark_web_mem_free_func;
160 } ArkWebStringMap;
161 
162 const ArkWebStringMap ark_web_string_map_default = {
163     0,
164 };
165 
166 typedef struct {
167     int size;
168     ArkWebString* value;
169 
170     ArkWebMemFreeFunc ark_web_mem_free_func;
171 } ArkWebStringList;
172 
173 const ArkWebStringList ark_web_string_list_default = {
174     0,
175 };
176 
177 typedef struct {
178     int size;
179     ArkWebString* value;
180 
181     ArkWebMemFreeFunc ark_web_mem_free_func;
182 } ArkWebStringVector;
183 
184 const ArkWebStringVector ark_web_string_vector_default = {
185     0,
186 };
187 
188 typedef struct {
189     int size;
190     ArkWebString* key;
191     ArkWebStringVector* value;
192 
193     ArkWebMemFreeFunc ark_web_mem_free_func;
194 } ArkWebStringVectorMap;
195 
196 const ArkWebStringVectorMap ark_web_string_vector_map_default = {
197     0,
198 };
199 
200 typedef struct {
201     int size;
202     ArkWebString* key;
203     ArkWebUint8Vector* value;
204 
205     ArkWebMemFreeFunc ark_web_mem_free_func;
206 } ArkWebUInt8VectorMap;
207 
208 const ArkWebUInt8VectorMap ark_web_uint8_vector_map_default = {
209     0,
210 };
211 
212 template<typename T1, typename T2, typename R>
ArkWebBasicMapClassToStruct(const std::map<T1,T2> & class_value)213 R ArkWebBasicMapClassToStruct(const std::map<T1, T2>& class_value)
214 {
215     R struct_value = { .size = class_value.size(), .ark_web_mem_free_func = ArkWebMemFree };
216     if (struct_value.size > 0) {
217         struct_value.key = (T1*)ArkWebMemMalloc(sizeof(T1) * struct_value.size);
218         struct_value.value = (T2*)ArkWebMemMalloc(sizeof(T2) * struct_value.size);
219         if (struct_value.key == nullptr || struct_value.value == nullptr) {
220             ArkWebMemFree(struct_value.key);
221             ArkWebMemFree(struct_value.value);
222             struct_value.size = 0;
223             return struct_value;
224         }
225 
226         int count = 0;
227         for (auto it = class_value.begin(); it != class_value.end(); it++) {
228             struct_value.key[count] = it->first;
229             struct_value.value[count] = it->second;
230             count++;
231         }
232     }
233 
234     return struct_value;
235 }
236 
237 template<typename T1, typename T2, typename P>
ArkWebBasicMapStructToClass(const P & struct_value)238 std::map<T1, T2> ArkWebBasicMapStructToClass(const P& struct_value)
239 {
240     std::map<T1, T2> class_value;
241     if (struct_value.size > 0) {
242         for (int count = 0; count < struct_value.size; count++) {
243             class_value.insert(std::map<T1, T2>::value_type(struct_value.key[count], struct_value.value[count]));
244         }
245     }
246 
247     return class_value;
248 }
249 
250 template<typename P>
ArkWebBasicMapStructRelease(P & struct_value)251 ARK_WEB_NO_SANITIZE void ArkWebBasicMapStructRelease(P& struct_value)
252 {
253     struct_value.size = 0;
254     SAFE_FREE(struct_value.key, struct_value.ark_web_mem_free_func);
255     SAFE_FREE(struct_value.value, struct_value.ark_web_mem_free_func);
256 }
257 
258 template<typename T, typename R>
ArkWebBasicListClassToStruct(const std::list<T> & class_value)259 R ArkWebBasicListClassToStruct(const std::list<T>& class_value)
260 {
261     R struct_value = { .size = class_value.size(), .ark_web_mem_free_func = ArkWebMemFree };
262     if (struct_value.size > 0) {
263         struct_value.value = (T*)ArkWebMemMalloc(sizeof(T) * struct_value.size);
264         if (struct_value.value == nullptr) {
265             struct_value.size = 0;
266             return struct_value;
267         }
268 
269         int count = 0;
270         for (auto it = class_value.begin(); it != class_value.end(); it++) {
271             struct_value.value[count] = *it;
272             count++;
273         }
274     }
275 
276     return struct_value;
277 }
278 
279 template<typename T, typename P>
ArkWebBasicListStructToClass(const P & struct_value)280 std::list<T> ArkWebBasicListStructToClass(const P& struct_value)
281 {
282     std::list<T> class_value;
283     if (struct_value.size > 0) {
284         for (int count = 0; count < struct_value.size; count++) {
285             class_value.push_back(struct_value.value[count]);
286         }
287     }
288 
289     return class_value;
290 }
291 
292 template<typename P>
ArkWebBasicListStructRelease(P & struct_value)293 ARK_WEB_NO_SANITIZE void ArkWebBasicListStructRelease(P& struct_value)
294 {
295     struct_value.size = 0;
296     SAFE_FREE(struct_value.value, struct_value.ark_web_mem_free_func);
297 }
298 
299 template<typename T, typename R>
ArkWebBasicVectorClassToStruct(const std::vector<T> & class_value)300 R ArkWebBasicVectorClassToStruct(const std::vector<T>& class_value)
301 {
302     R struct_value = { .size = class_value.size(), .ark_web_mem_free_func = ArkWebMemFree };
303     if (struct_value.size > 0) {
304         struct_value.value = (T*)ArkWebMemMalloc(sizeof(T) * struct_value.size);
305         if (struct_value.value == nullptr) {
306             struct_value.size = 0;
307             return struct_value;
308         }
309 
310         int count = 0;
311         for (auto it = class_value.begin(); it != class_value.end(); it++) {
312             struct_value.value[count] = *it;
313             count++;
314         }
315     }
316 
317     return struct_value;
318 }
319 
320 template<typename T, typename P>
ArkWebBasicVectorStructToClass(const P & struct_value)321 std::vector<T> ArkWebBasicVectorStructToClass(const P& struct_value)
322 {
323     std::vector<T> class_value;
324     if (struct_value.size > 0) {
325         for (int count = 0; count < struct_value.size; count++) {
326             class_value.push_back(struct_value.value[count]);
327         }
328     }
329 
330     return class_value;
331 }
332 
333 template<typename P>
ArkWebBasicVectorStructRelease(P & struct_value)334 ARK_WEB_NO_SANITIZE void ArkWebBasicVectorStructRelease(P& struct_value)
335 {
336     struct_value.size = 0;
337     SAFE_FREE(struct_value.value, struct_value.ark_web_mem_free_func);
338 }
339 
340 ArkWebString ArkWebStringClassToStruct(const std::string& class_value);
341 
342 std::string ArkWebStringStructToClass(const ArkWebString& struct_value);
343 
344 ArkWebU16String ArkWebU16StringClassToStruct(const std::u16string& class_value);
345 
346 std::u16string ArkWebU16StringStructToClass(const ArkWebU16String& struct_value);
347 
348 void ArkWebStringStructRelease(ArkWebString& struct_value);
349 
350 void ArkWebU16StringStructRelease(ArkWebU16String& struct_value);
351 
352 ArkWebStringMap ArkWebStringMapClassToStruct(const std::map<std::string, std::string>& class_value);
353 
354 std::map<std::string, std::string> ArkWebStringMapStructToClass(const ArkWebStringMap& struct_value);
355 
356 void ArkWebStringMapStructRelease(ArkWebStringMap& struct_value);
357 
358 ArkWebStringList ArkWebStringListClassToStruct(const std::list<std::string>& class_value);
359 
360 std::list<std::string> ArkWebStringListStructToClass(const ArkWebStringList& struct_value);
361 
362 void ArkWebStringListStructRelease(ArkWebStringList& struct_value);
363 
364 ArkWebStringVector ArkWebStringVectorClassToStruct(const std::vector<std::string>& class_value);
365 
366 std::vector<std::string> ArkWebStringVectorStructToClass(const ArkWebStringVector& struct_value);
367 
368 void ArkWebStringVectorStructRelease(ArkWebStringVector& struct_value);
369 
370 ArkWebStringVectorMap ArkWebStringVectorMapClassToStruct(
371     const std::map<std::string, std::vector<std::string>>& class_value);
372 
373 std::map<std::string, std::vector<std::string>> ArkWebStringVectorMapStructToClass(
374     const ArkWebStringVectorMap& struct_value);
375 
376 void ArkWebStringVectorMapStructRelease(ArkWebStringVectorMap& struct_value);
377 
378 ArkWebUInt8VectorMap ArkWebUInt8VectorMapClassToStruct(
379     const std::map<std::string, std::vector<uint8_t>>& class_value);
380 
381 std::map<std::string, std::vector<uint8_t>> ArkWebUInt8VectorMapStructToClass(
382     const ArkWebUInt8VectorMap& struct_value);
383 
384 void ArkWebUInt8VectorMapStructRelease(ArkWebUInt8VectorMap& struct_value);
385 
386 #endif // ARK_WEB_TYPES_H_