• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2023-2025 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 PANDA_RUNTIME_ETS_ETS_STRING_BUILDER_H
17 #define PANDA_RUNTIME_ETS_ETS_STRING_BUILDER_H
18 
19 #include "runtime/include/object_header.h"
20 #include "plugins/ets/runtime/types/ets_string.h"
21 #include "plugins/ets/runtime/types/ets_primitives.h"
22 
23 namespace ark::ets {
24 
25 EtsString *StringBuilderToString(ObjectHeader *sb);
26 ObjectHeader *StringBuilderAppendNullString(ObjectHeader *sb);
27 ObjectHeader *StringBuilderAppendString(ObjectHeader *sb, EtsString *str);
28 ObjectHeader *StringBuilderAppendStrings(ObjectHeader *sb, EtsString *str0, EtsString *str1);
29 ObjectHeader *StringBuilderAppendStrings(ObjectHeader *sb, EtsString *str0, EtsString *str1, EtsString *str2);
30 ObjectHeader *StringBuilderAppendStrings(ObjectHeader *sb, EtsString *str0, EtsString *str1, EtsString *str2,
31                                          EtsString *str3);
32 ObjectHeader *StringBuilderAppendBool(ObjectHeader *sb, EtsBoolean v);
33 ObjectHeader *StringBuilderAppendChar(ObjectHeader *sb, EtsChar v);
34 ObjectHeader *StringBuilderAppendLong(ObjectHeader *sb, EtsLong v);
35 ObjectHeader *StringBuilderAppendFloat(ObjectHeader *sb, EtsFloat v);
36 ObjectHeader *StringBuilderAppendDouble(ObjectHeader *sb, EtsDouble v);
37 
38 namespace test {
39 class EtsStringBuilderMembersTest;
40 }  // namespace test
41 
42 class EtsStringBuilder : public EtsObject {
43 public:
44     EtsStringBuilder() = delete;
45     ~EtsStringBuilder() = delete;
46 
47     NO_COPY_SEMANTIC(EtsStringBuilder);
48     NO_MOVE_SEMANTIC(EtsStringBuilder);
49 
FromCoreType(ObjectHeader * obj)50     static EtsStringBuilder *FromCoreType(ObjectHeader *obj)
51     {
52         return reinterpret_cast<EtsStringBuilder *>(obj);
53     }
54 
GetCoreType()55     ObjectHeader *GetCoreType()
56     {
57         return reinterpret_cast<ObjectHeader *>(this);
58     }
59 
AsObject()60     EtsObject *AsObject()
61     {
62         return this;
63     }
64 
AsObject()65     const EtsObject *AsObject() const
66     {
67         return this;
68     }
69 
FromEtsObject(EtsObject * etsObj)70     static EtsStringBuilder *FromEtsObject(EtsObject *etsObj)
71     {
72         return reinterpret_cast<EtsStringBuilder *>(etsObj);
73     }
74 
GetBuf()75     EtsObjectArray *GetBuf() const
76     {
77         return EtsObjectArray::FromCoreType(ObjectAccessor::GetObject(this, MEMBER_OFFSET(EtsStringBuilder, buf_)));
78     }
79 
SetBuf(EtsCoroutine * coro,EtsObjectArray * buf)80     void SetBuf(EtsCoroutine *coro, EtsObjectArray *buf)
81     {
82         ObjectAccessor::SetObject(coro, this, MEMBER_OFFSET(EtsStringBuilder, buf_), buf->GetCoreType());
83     }
84 
GetIndex()85     EtsInt GetIndex() const
86     {
87         return index_;
88     }
89 
SetIndex(EtsInt index)90     void SetIndex(EtsInt index)
91     {
92         index_ = index;
93     }
94 
GetLength()95     EtsInt GetLength() const
96     {
97         return length_;
98     }
99 
SetLength(EtsInt length)100     void SetLength(EtsInt length)
101     {
102         length_ = length;
103     }
104 
GetCompress()105     EtsBoolean GetCompress() const
106     {
107         return compress_;
108     }
109 
SetCompress(EtsBoolean compress)110     void SetCompress(EtsBoolean compress)
111     {
112         compress_ = compress;
113     }
114 
115 private:
116     ObjectPointer<EtsObjectArray> buf_;  // array with pointers to strings or char[]
117     EtsInt index_;                       // index of the current free element in the buf
118     EtsInt length_;                      // length of the resulting string
119     EtsBoolean compress_;                // compress or not the resulting string
120 
121     friend class test::EtsStringBuilderMembersTest;
122 };
123 
124 }  // namespace ark::ets
125 
126 #endif  // PANDA_RUNTIME_ETS_ETS_STRING_BUILDER_H
127