1/*
2 * Copyright (C) 2021 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 HC_STRING_H
17#define HC_STRING_H
18
19#include "hc_parcel.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25typedef struct HcString {
26    HcParcel parcel; // parcel data, used to storage the string data
27} HcString;
28
29/*
30 * Append a HcString
31 * Notice: It will add '\0' automatically.
32 * @param self: self pointer.
33 * @param str: append string.
34 * @return HC_TRUE (ok), HC_FALSE (error)
35 */
36HcBool StringAppend(HcString *self, HcString str);
37
38/*
39 * Append string pointer
40 * Notice: It will add '\0' automatically.
41 * @param self: self pointer.
42 * @param str: string pointer.
43 * @return HC_TRUE (ok), HC_FALSE (error)
44 */
45HcBool StringAppendPointer(HcString *self, const char *str);
46
47/*
48 * Append a char
49 * Notice: It will add '\0' automatically.
50 * @param self: self pointer.
51 * @param str: char.
52 * @return HC_TRUE (ok), HC_FALSE (error)
53 */
54HcBool StringAppendChar(HcString *self, char c);
55
56/*
57 * Assign a value to the HcString
58 * Notice: It will add '\0' automatically.
59 * @param self: self pointer.
60 * @param str: assign value of ta_sting.
61 * @return HC_TRUE (ok), HC_FALSE (error)
62 */
63HcBool StringSet(HcString *self, HcString str);
64
65/*
66 * Assign a value to the HcString
67 * Notice: It will add '\0' automatically.
68 * @param self: self pointer.
69 * @param str: assign value of string pointer.
70 * @return HC_TRUE (ok), HC_FALSE (error)
71 */
72HcBool StringSetPointer(HcString *self, const char *str);
73
74/*
75 * Get the string pointer data
76 * @param self: self pointer.
77 * @return the pointer data of the string
78 */
79const char* StringGet(const HcString *self);
80
81/*
82 * Get the length of the string
83 * @param self: self pointer.
84 * @return the length of the string
85 */
86uint32_t StringLength(const HcString *self);
87
88/*
89 * Create a string.
90 * Notice: You should delete string when you don't need the string anymore.
91 * @return the created string.
92 */
93HcString CreateString(void);
94
95/*
96 * Delete a string. In fact it will not destroy the string,
97 * but only free the allocated memory of the string and reset the member's value
98 * of the string. You can continue to use the string if you want.
99 * Notice: You should delete the string when you don't need it any more to avoid memory leak.
100 * @param str: The string you want to delete.
101 */
102void DeleteString(HcString *str);
103
104#ifdef __cplusplus
105}
106#endif
107#endif
108