1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #ifndef SIMPLE_METHOD_STATE_H_ 18*ec779b8eSAndroid Build Coastguard Worker #define SIMPLE_METHOD_STATE_H_ 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard Worker #include <C2.h> 21*ec779b8eSAndroid Build Coastguard Worker 22*ec779b8eSAndroid Build Coastguard Worker namespace android { 23*ec779b8eSAndroid Build Coastguard Worker 24*ec779b8eSAndroid Build Coastguard Worker /** 25*ec779b8eSAndroid Build Coastguard Worker * State for a simple method which returns c2_status_t and takes no parameters. 26*ec779b8eSAndroid Build Coastguard Worker */ 27*ec779b8eSAndroid Build Coastguard Worker class SimpleMethodState { 28*ec779b8eSAndroid Build Coastguard Worker public: 29*ec779b8eSAndroid Build Coastguard Worker enum Mode { 30*ec779b8eSAndroid Build Coastguard Worker // Execute the normal operation 31*ec779b8eSAndroid Build Coastguard Worker EXECUTE, 32*ec779b8eSAndroid Build Coastguard Worker // Don't do anything 33*ec779b8eSAndroid Build Coastguard Worker NO_OP, 34*ec779b8eSAndroid Build Coastguard Worker // Hang; never return 35*ec779b8eSAndroid Build Coastguard Worker HANG, 36*ec779b8eSAndroid Build Coastguard Worker }; 37*ec779b8eSAndroid Build Coastguard Worker 38*ec779b8eSAndroid Build Coastguard Worker /** 39*ec779b8eSAndroid Build Coastguard Worker * Injecter class that modifies the internal states of this class. 40*ec779b8eSAndroid Build Coastguard Worker */ 41*ec779b8eSAndroid Build Coastguard Worker class Injecter { 42*ec779b8eSAndroid Build Coastguard Worker public: 43*ec779b8eSAndroid Build Coastguard Worker explicit Injecter(SimpleMethodState *thiz); 44*ec779b8eSAndroid Build Coastguard Worker 45*ec779b8eSAndroid Build Coastguard Worker /** 46*ec779b8eSAndroid Build Coastguard Worker * Hang the operation. 47*ec779b8eSAndroid Build Coastguard Worker */ 48*ec779b8eSAndroid Build Coastguard Worker void hang(); 49*ec779b8eSAndroid Build Coastguard Worker 50*ec779b8eSAndroid Build Coastguard Worker /** 51*ec779b8eSAndroid Build Coastguard Worker * Fail the operation with given params. 52*ec779b8eSAndroid Build Coastguard Worker * 53*ec779b8eSAndroid Build Coastguard Worker * \param err error code to replace the actual return value 54*ec779b8eSAndroid Build Coastguard Worker * \param execute whether the wrapper should execute the operation 55*ec779b8eSAndroid Build Coastguard Worker */ 56*ec779b8eSAndroid Build Coastguard Worker void fail(c2_status_t err, bool execute = false); 57*ec779b8eSAndroid Build Coastguard Worker 58*ec779b8eSAndroid Build Coastguard Worker private: 59*ec779b8eSAndroid Build Coastguard Worker SimpleMethodState *const mThiz; 60*ec779b8eSAndroid Build Coastguard Worker }; 61*ec779b8eSAndroid Build Coastguard Worker 62*ec779b8eSAndroid Build Coastguard Worker SimpleMethodState(); 63*ec779b8eSAndroid Build Coastguard Worker 64*ec779b8eSAndroid Build Coastguard Worker /** 65*ec779b8eSAndroid Build Coastguard Worker * Get execution mode. 66*ec779b8eSAndroid Build Coastguard Worker */ 67*ec779b8eSAndroid Build Coastguard Worker Mode getMode() const; 68*ec779b8eSAndroid Build Coastguard Worker 69*ec779b8eSAndroid Build Coastguard Worker /** 70*ec779b8eSAndroid Build Coastguard Worker * Override result from running the operation if configured so. 71*ec779b8eSAndroid Build Coastguard Worker */ 72*ec779b8eSAndroid Build Coastguard Worker bool overrideResult(c2_status_t *result) const; 73*ec779b8eSAndroid Build Coastguard Worker 74*ec779b8eSAndroid Build Coastguard Worker private: 75*ec779b8eSAndroid Build Coastguard Worker Mode mMode; 76*ec779b8eSAndroid Build Coastguard Worker bool mOverride; 77*ec779b8eSAndroid Build Coastguard Worker c2_status_t mResultOverride; 78*ec779b8eSAndroid Build Coastguard Worker }; 79*ec779b8eSAndroid Build Coastguard Worker 80*ec779b8eSAndroid Build Coastguard Worker } // namespace android 81*ec779b8eSAndroid Build Coastguard Worker 82*ec779b8eSAndroid Build Coastguard Worker #endif // SIMPLE_METHOD_STATE_H_ 83