1 /*
2  * Copyright (c) 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 OHOS_IDL_AST_ATTRIBUTE_H
17 #define OHOS_IDL_AST_ATTRIBUTE_H
18 
19 #include "ast/ast_node.h"
20 
21 namespace OHOS {
22 namespace Idl {
23 class ASTAttr : public ASTNode {
24 public:
25     using Attribute = uint32_t;
26     static constexpr Attribute NONE = 0U;
27     static constexpr Attribute MINI = 0x1U;
28     static constexpr Attribute LITE = 0x1U << 1;
29     static constexpr Attribute FULL = 0x1U << 2;
30     static constexpr Attribute ONEWAY = 0x1U << 3;
31     static constexpr Attribute CALLBACK = 0x1U << 4;
32     static constexpr Attribute CACHEABLE = 0x1U << 5;
33     static constexpr Attribute FREEZECONTROL = 0x1U << 6;
34 
35     explicit ASTAttr(Attribute value = ASTAttr::NONE) : value_(value) {}
36 
37     std::string ToString() const override;
38 
39     std::string Dump(const std::string &prefix) override;
40 
SetValue(Attribute value)41     inline void SetValue(Attribute value)
42     {
43         value_ |= value;
44     }
45 
GetValue()46     inline Attribute GetValue() const
47     {
48         return value_;
49     }
50 
IsNone()51     bool IsNone() const
52     {
53         return value_  == NONE;
54     }
55 
HasValue(Attribute attr)56     bool HasValue(Attribute attr) const
57     {
58         return (value_ & attr) != 0;
59     }
60 
61     bool Match(SystemLevel level) const;
62 
GetCacheableTime()63     int32_t GetCacheableTime()
64     {
65         return cacheableTime_;
66     }
67 
GetCacheableTimeString()68     std::string& GetCacheableTimeString()
69     {
70         return cacheableTimeString_;
71     }
72 
SetCacheableTimeString(const std::string & timeStr)73     void SetCacheableTimeString(const std::string &timeStr)
74     {
75         cacheableTimeString_ = timeStr;
76     }
77 
78     bool CacheableStrToInt();
79 
80 private:
81     Attribute value_;
82     int32_t cacheableTime_ = 0;
83     std::string cacheableTimeString_;
84 };
85 
86 class ASTParamAttr : public ASTNode {
87 public:
88     using ParamAttr = uint32_t;
89     static constexpr ParamAttr PARAM_NONE = 0U;
90     static constexpr ParamAttr PARAM_IN = 0x1U;
91     static constexpr ParamAttr PARAM_OUT = 0x1U << 1;
92     static constexpr ParamAttr PARAM_INOUT = (PARAM_IN | PARAM_OUT);
93 
ASTParamAttr(ParamAttr value)94     explicit ASTParamAttr(ParamAttr value) : ASTNode(), value_(value) {}
95 
96     std::string ToString() const override;
97 
98     std::string Dump(const std::string &prefix) override;
99 
100 public:
101     ParamAttr value_;
102 };
103 
104 } // namespace Idl
105 } // namespace OHOS
106 
107 #endif // OHOS_IDL_AST_ATTRIBUTE_H