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 "hcf_parcel.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25    typedef struct HcString {
26        HcParcel parcel; // parcel data, used to storage the string data
27    } HcString;
28
29    /*
30    * Append string pointer
31    * Notice: It will add '\0' automatically.
32    * @param self: self pointer.
33    * @param str: string pointer.
34    * @return true (ok), false (error)
35    */
36    bool StringAppendPointer(HcString *self, const char *str);
37
38    /*
39    * Assign a value to the HcString
40    * Notice: It will add '\0' automatically.
41    * @param self: self pointer.
42    * @param str: assign value of string pointer.
43    * @return true (ok), false (error)
44    */
45    bool StringSetPointer(HcString *self, const char *str);
46
47    /*
48    * Assign a value to the HcString with fixed length
49    * Notice: It will add '\0' automatically.
50    * @param self: self pointer.
51    * @param str: assign value of string pointer.
52    * @param len: the length of string.
53    * @return true (ok), false (error)
54    */
55    bool StringSetPointerWithLength(HcString* self, const char *str, uint32_t len);
56
57    /*
58    * Get the string pointer data
59    * @param self: self pointer.
60    * @return the pointer data of the string
61    */
62    const char* StringGet(const HcString *self);
63
64    /*
65    * Get the length of the string
66    * @param self: self pointer.
67    * @return the length of the string
68    */
69    uint32_t StringLength(const HcString *self);
70
71    /*
72    * Find a char from string
73    * @param self: self pointer.
74    * @param c: the char you want find
75    * @param begin: the position find from
76    * @return the position of the char
77    */
78    int StringFind(const HcString *self, char c, uint32_t begin);
79
80    /*
81    * Get sub string from a string.
82    * @param self: self pointer.
83    * @param begin: the begin position of the sub string.
84    * @param len: the length of the sub string.
85    * @param dst: the string pointer which saved the sub string content.
86    * @return the operation result.
87    */
88    bool StringSubString(const HcString *self, uint32_t begin, uint32_t len, HcString* dst);
89
90    /*
91    * Compare the string with another string.
92    * @param self: self pointer.
93    * @param dst: the pointer of another string.
94    * @return the compare result.
95    *  -1: self is smaller than dst
96    *   0: self is equal with dst
97    *   1: self is bigger than dst
98    */
99    int StringCompare(const HcString *self, const char* dst);
100
101    /*
102    * Create a string.
103    * Notice: You should delete string when you don't need the string anymore.
104    * @return the created string.
105    */
106    HcString CreateString(void);
107
108    /*
109    * Delete a string. In fact it will not destroy the string,
110    * but only free the allocated memory of the string and reset the member's value
111    * of the string. You can continue to use the string if you want.
112    * Notice: You should delete the string when you don't need it any more to avoid memory leak.
113    * @param str: The string you want to delete.
114    */
115    void DeleteString(HcString *str);
116
117#ifdef __cplusplus
118}
119#endif
120#endif
121