• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "script_basicinstruction.h"
16 #include <unistd.h>
17 #include "script_loadscript.h"
18 #include "script_manager_impl.h"
19 #include "script_registercmd.h"
20 #include "script_utils.h"
21 
22 using namespace uscript;
23 using namespace std;
24 
25 namespace BasicInstruction {
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)26 int32_t UScriptInstructionAbort::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
27 {
28     int32_t result = 1;
29     int32_t ret = context.GetParam(0, result);
30     USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
31     return ((result == 0) ? USCRIPT_ABOART : USCRIPT_SUCCESS);
32 }
33 
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)34 int32_t UScriptInstructionAssert::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
35 {
36     int32_t result = 1;
37     int32_t ret = context.GetParam(0, result);
38     USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
39     return ((result == 0) ? USCRIPT_ASSERT : USCRIPT_SUCCESS);
40 }
41 
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)42 int32_t UScriptInstructionSleep::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
43 {
44     int32_t seconds = 1;
45     int32_t ret = context.GetParam(0, seconds);
46     USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
47     sleep(seconds);
48     return USCRIPT_SUCCESS;
49 }
50 
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)51 int32_t UScriptInstructionConcat::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
52 {
53     int32_t ret = 0;
54     std::string str;
55     ret = context.GetParam(0, str);
56     USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
57 
58     for (int32_t i = 1; i < context.GetParamCount(); i++) {
59         switch (context.GetParamType(i)) {
60             case UScriptContext::PARAM_TYPE_INTEGER: {
61                 int32_t v;
62                 ret = context.GetParam(i, v);
63                 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
64                 str.append(to_string(v));
65                 break;
66             }
67             case UScriptContext::PARAM_TYPE_FLOAT: {
68                 float v;
69                 ret = context.GetParam(i, v);
70                 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
71                 str.append(to_string(v));
72                 break;
73             }
74             case UScriptContext::PARAM_TYPE_STRING: {
75                 std::string v;
76                 ret = context.GetParam(i, v);
77                 USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
78                 str.append(v);
79                 break;
80             }
81             default:
82                 break;
83         }
84     }
85     context.PushParam(str);
86     return USCRIPT_SUCCESS;
87 }
88 
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)89 int32_t UScriptInstructionIsSubString::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
90 {
91     std::string str;
92     std::string subStr;
93     int32_t ret = context.GetParam(0, str);
94     USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
95     ret = context.GetParam(1, subStr);
96     USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
97     string::size_type last = str.find(subStr);
98     if (last == string::npos) {
99         context.PushParam(0);
100     } else {
101         context.PushParam(1);
102     }
103     return USCRIPT_SUCCESS;
104 }
105 
Execute(uscript::UScriptEnv & env,uscript::UScriptContext & context)106 int32_t UScriptInstructionStdout::Execute(uscript::UScriptEnv &env, uscript::UScriptContext &context)
107 {
108     int32_t ret;
109     for (int32_t i = 0; i < context.GetParamCount(); i++) {
110         if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_INTEGER) {
111             int32_t v;
112             ret = context.GetParam(i, v);
113             USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
114             std::cout << v << "  ";
115         } else if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_FLOAT) {
116             float v;
117             ret = context.GetParam(i, v);
118             USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
119             std::cout << v << "  ";
120         } else if (context.GetParamType(i) == UScriptContext::PARAM_TYPE_STRING) {
121             std::string v;
122             ret = context.GetParam(i, v);
123             USCRIPT_CHECK(ret == USCRIPT_SUCCESS, return ret, "Failed to get param");
124             std::cout << v << "  ";
125         }
126     }
127     std::cout << std::endl;
128     return USCRIPT_SUCCESS;
129 }
130 } // namespace BasicInstruction
131