1ca0551cfSopenharmony_ci/*
2ca0551cfSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License.
5ca0551cfSopenharmony_ci * You may obtain a copy of the License at
6ca0551cfSopenharmony_ci *
7ca0551cfSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8ca0551cfSopenharmony_ci *
9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and
13ca0551cfSopenharmony_ci * limitations under the License.
14ca0551cfSopenharmony_ci */
15ca0551cfSopenharmony_ci
16ca0551cfSopenharmony_ci#ifndef OHOS_IDL_STRING_H
17ca0551cfSopenharmony_ci#define OHOS_IDL_STRING_H
18ca0551cfSopenharmony_ci
19ca0551cfSopenharmony_ci#include <cstddef>
20ca0551cfSopenharmony_ci
21ca0551cfSopenharmony_cinamespace OHOS {
22ca0551cfSopenharmony_cinamespace Idl {
23ca0551cfSopenharmony_ciclass String {
24ca0551cfSopenharmony_cipublic:
25ca0551cfSopenharmony_ci    String() {}
26ca0551cfSopenharmony_ci
27ca0551cfSopenharmony_ci    String(const char* string);
28ca0551cfSopenharmony_ci
29ca0551cfSopenharmony_ci    String(const char* string, size_t length);
30ca0551cfSopenharmony_ci
31ca0551cfSopenharmony_ci    String(const String& other);
32ca0551cfSopenharmony_ci
33ca0551cfSopenharmony_ci    String(String&& other);
34ca0551cfSopenharmony_ci
35ca0551cfSopenharmony_ci    ~String();
36ca0551cfSopenharmony_ci
37ca0551cfSopenharmony_ci    const char* string() const
38ca0551cfSopenharmony_ci    {
39ca0551cfSopenharmony_ci        return string_;
40ca0551cfSopenharmony_ci    }
41ca0551cfSopenharmony_ci
42ca0551cfSopenharmony_ci    operator const char*() const
43ca0551cfSopenharmony_ci    {
44ca0551cfSopenharmony_ci        return string_;
45ca0551cfSopenharmony_ci    }
46ca0551cfSopenharmony_ci
47ca0551cfSopenharmony_ci    bool IsNull() const
48ca0551cfSopenharmony_ci    {
49ca0551cfSopenharmony_ci        return string_ == nullptr;
50ca0551cfSopenharmony_ci    }
51ca0551cfSopenharmony_ci
52ca0551cfSopenharmony_ci    bool IsEmpty() const
53ca0551cfSopenharmony_ci    {
54ca0551cfSopenharmony_ci        return string_ == nullptr || string_[0] == '\0';
55ca0551cfSopenharmony_ci    }
56ca0551cfSopenharmony_ci
57ca0551cfSopenharmony_ci    int GetLength() const;
58ca0551cfSopenharmony_ci
59ca0551cfSopenharmony_ci    char operator[](int index) const;
60ca0551cfSopenharmony_ci
61ca0551cfSopenharmony_ci    bool Equals(const char* string) const;
62ca0551cfSopenharmony_ci
63ca0551cfSopenharmony_ci    bool Equals(const String& other) const;
64ca0551cfSopenharmony_ci
65ca0551cfSopenharmony_ci    int GetHashCode() const;
66ca0551cfSopenharmony_ci
67ca0551cfSopenharmony_ci    int IndexOf(char c, int fromIndex = 0) const;
68ca0551cfSopenharmony_ci
69ca0551cfSopenharmony_ci    int IndexOf(const char* string, int fromIndex = 0) const;
70ca0551cfSopenharmony_ci
71ca0551cfSopenharmony_ci    int IndexOf(const String& other, int fromIndex = 0) const;
72ca0551cfSopenharmony_ci
73ca0551cfSopenharmony_ci    int LastIndexOf(char c, int fromIndex = 0) const;
74ca0551cfSopenharmony_ci
75ca0551cfSopenharmony_ci    int LastIndexOf(const char* string, int fromIndex = 0) const;
76ca0551cfSopenharmony_ci
77ca0551cfSopenharmony_ci    int LastIndexOf(const String& other, int fromIndex = 0) const;
78ca0551cfSopenharmony_ci
79ca0551cfSopenharmony_ci    bool StartsWith(const char* string) const;
80ca0551cfSopenharmony_ci
81ca0551cfSopenharmony_ci    bool StartsWith(const String& other) const;
82ca0551cfSopenharmony_ci
83ca0551cfSopenharmony_ci    bool EndsWith(const char* string) const;
84ca0551cfSopenharmony_ci
85ca0551cfSopenharmony_ci    bool EndsWith(const String& other) const;
86ca0551cfSopenharmony_ci
87ca0551cfSopenharmony_ci    String ToLowerCase() const;
88ca0551cfSopenharmony_ci
89ca0551cfSopenharmony_ci    String ToUpperCase() const;
90ca0551cfSopenharmony_ci
91ca0551cfSopenharmony_ci    String Substring(int begin) const;
92ca0551cfSopenharmony_ci
93ca0551cfSopenharmony_ci    String Substring(int begin, int end) const;
94ca0551cfSopenharmony_ci
95ca0551cfSopenharmony_ci    String Replace(char oldChar, char newChar) const;
96ca0551cfSopenharmony_ci
97ca0551cfSopenharmony_ci    String Replace(const char* target, const char* replacement) const;
98ca0551cfSopenharmony_ci
99ca0551cfSopenharmony_ci    String Replace(const String& target, const String& replacement) const;
100ca0551cfSopenharmony_ci
101ca0551cfSopenharmony_ci    String& operator=(const char* string);
102ca0551cfSopenharmony_ci
103ca0551cfSopenharmony_ci    String& operator=(const String& other);
104ca0551cfSopenharmony_ci
105ca0551cfSopenharmony_ci    String& operator=(String&& other);
106ca0551cfSopenharmony_ci
107ca0551cfSopenharmony_ci    String operator+=(const char* string) const;
108ca0551cfSopenharmony_ci
109ca0551cfSopenharmony_ci    String operator+=(const String& other) const;
110ca0551cfSopenharmony_ci
111ca0551cfSopenharmony_ci    static String Format(const char* format, ...);
112ca0551cfSopenharmony_ci
113ca0551cfSopenharmony_ci    static const char* TAG;
114ca0551cfSopenharmony_ci    static constexpr int MAX_SIZE = 262144; // 2^18
115ca0551cfSopenharmony_ci
116ca0551cfSopenharmony_ciprivate:
117ca0551cfSopenharmony_ci    String(int size);
118ca0551cfSopenharmony_ci
119ca0551cfSopenharmony_ci    int LastIndexOfInternal(const char* string, int fromIndex) const;
120ca0551cfSopenharmony_ci
121ca0551cfSopenharmony_ci    char* string_ = nullptr;
122ca0551cfSopenharmony_ci};
123ca0551cfSopenharmony_ci
124ca0551cfSopenharmony_ciinline String operator+(const String& string1, const char* string2)
125ca0551cfSopenharmony_ci{
126ca0551cfSopenharmony_ci    return string1 += string2;
127ca0551cfSopenharmony_ci}
128ca0551cfSopenharmony_ci
129ca0551cfSopenharmony_cistruct StringHashFunc {
130ca0551cfSopenharmony_ci    int operator()(const String& key) const
131ca0551cfSopenharmony_ci    {
132ca0551cfSopenharmony_ci        return key.GetHashCode();
133ca0551cfSopenharmony_ci    }
134ca0551cfSopenharmony_ci};
135ca0551cfSopenharmony_ci
136ca0551cfSopenharmony_cistruct StringEqualFunc {
137ca0551cfSopenharmony_ci    bool operator()(const String& lhs, const String& rhs) const
138ca0551cfSopenharmony_ci    {
139ca0551cfSopenharmony_ci        return lhs.Equals(rhs);
140ca0551cfSopenharmony_ci    }
141ca0551cfSopenharmony_ci};
142ca0551cfSopenharmony_ci}
143ca0551cfSopenharmony_ci}
144ca0551cfSopenharmony_ci#endif // OHOS_IDL_STRING_H
145