IPS(Interpreter for Process Structures) for mbed
Dependencies: ConfigFile FATFileSystem mbed
mbedAPI.h
00001 // mbedAPI.h 2015/5/22 00002 #include "BaseIPS.h" 00003 #include "myvector.h" 00004 00005 struct mbedObj { 00006 void* p; 00007 uint8_t ct; 00008 }; 00009 00010 class mbedAPI { 00011 BaseIPS& ips; 00012 00013 public: 00014 mbedAPI(BaseIPS& ips_): ips(ips_) {} 00015 void code(); 00016 00017 private: 00018 template<class T> 00019 void init(int ct) { 00020 push_ps_obj(new T(), ct); 00021 } 00022 00023 template<class T, typename A1> 00024 void init(int ct) { 00025 A1 a1 = pull_ps<A1>(); 00026 push_ps_obj(new T(a1), ct); 00027 } 00028 00029 template<class T, typename A1, typename A2> 00030 void init(int ct) { 00031 A2 a2 = pull_ps<A2>(); 00032 A1 a1 = pull_ps<A1>(); 00033 push_ps_obj(new T(a1, a2), ct); 00034 } 00035 00036 template<class T, typename A1, typename A2, typename A3> 00037 void init(int ct) { 00038 A3 a3 = pull_ps<A3>(); 00039 A2 a2 = pull_ps<A2>(); 00040 A1 a1 = pull_ps<A1>(); 00041 push_ps_obj(new T(a1, a2, a3), ct); 00042 } 00043 00044 template<class T, void(T::*member)()> 00045 void method(void* obj) { 00046 (reinterpret_cast<T*>(obj)->*member)(); 00047 } 00048 00049 template<class T, typename A1, void(T::*member)(A1)> 00050 void method(void* obj) { 00051 A1 a1 = ips.pull_ps(); 00052 (reinterpret_cast<T*>(obj)->*member)(a1); 00053 } 00054 00055 template<typename R, class T, R(T::*member)()> 00056 void method(void* obj) { 00057 ips.push_ps((reinterpret_cast<T*>(obj)->*member)()); 00058 } 00059 00060 template<typename R, class T, typename A1, R(T::*member)(A1)> 00061 void method(void* obj) { 00062 A1 a1 = ips.pull_ps(); 00063 ips.push_ps((reinterpret_cast<T*>(obj)->*member)(a1)); 00064 } 00065 00066 template<typename T> 00067 PinName pull_ps(); 00068 00069 void code_method(int f); 00070 void code_method_I2C(int f, mbedObj& obj); 00071 mbedObj pull_ps_obj(); 00072 void push_ps_obj(void*, int ct); 00073 void pull_ps_string(char* buf, size_t size); 00074 PinName findPinName(const char* name) const; 00075 myvector<mbedObj> objs; 00076 }; 00077 00078
Generated on Fri Jul 15 2022 06:25:55 by 1.7.2