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