1 /* 2 * Part of tivars_lib_cpp 3 * (C) 2015-2019 Adrien "Adriweb" Bertrand 4 * https://github.com/adriweb/TIs_lib 5 * License: MIT 6 */ 7 8 #include "TIModel.h" 9 #include "TIModels.h" 10 11 namespace tivars 12 { 13 supportsType(const TIVarType & type)14 bool TIModel::supportsType(const TIVarType& type) 15 { 16 const std::vector<std::string>& exts = type.getExts(); 17 return this->orderID >= 0 && this->orderID < (int)exts.size() && !exts[this->orderID].empty(); 18 } 19 20 /*** "Constructors" ***/ 21 22 /** 23 * @param int flags The version compatibliity flags 24 * @return TIModel 25 * @throws \Exception 26 */ createFromFlags(uint flags)27 TIModel TIModel::createFromFlags(uint flags) 28 { 29 if (TIModels::isValidFlags(flags)) 30 { 31 TIModel model; 32 model.flags = flags; 33 model.orderID = TIModels::getDefaultOrderIDFromFlags(flags); 34 model.sig = TIModels::getSignatureFromFlags(flags); 35 model.name = TIModels::getDefaultNameFromFlags(flags); 36 return model; 37 } else 38 { 39 throw std::invalid_argument("Invalid version ID"); 40 } 41 } 42 43 /** 44 * @param string name The version name 45 * @return TIModel 46 * @throws \Exception 47 */ createFromName(const std::string & name)48 TIModel TIModel::createFromName(const std::string& name) 49 { 50 if (TIModels::isValidName(name)) 51 { 52 TIModel model; 53 model.name = name; 54 model.orderID = TIModels::getOrderIDFromName(name); 55 model.flags = TIModels::getFlagsFromName(name); 56 model.sig = TIModels::getSignatureFromName(name); 57 return model; 58 } else 59 { 60 throw std::invalid_argument("Invalid version name"); 61 } 62 } 63 64 /** 65 * @param string sig The signature (magic bytes) 66 * @return TIModel 67 * @throws \Exception 68 */ createFromSignature(const std::string & sig)69 TIModel TIModel::createFromSignature(const std::string& sig) 70 { 71 if (TIModels::isValidSignature(sig)) 72 { 73 TIModel model; 74 model.sig = sig; 75 model.orderID = TIModels::getDefaultOrderIDFromSignature(sig); 76 model.flags = TIModels::getMinFlagsFromSignature(sig); 77 model.name = TIModels::getDefaultNameFromSignature(sig); 78 return model; 79 } else 80 { 81 throw std::invalid_argument("Invalid version signature"); 82 } 83 } 84 } 85 86 #ifdef __EMSCRIPTEN__ 87 #include <emscripten/bind.h> 88 using namespace emscripten; EMSCRIPTEN_BINDINGS(_timodel)89 EMSCRIPTEN_BINDINGS(_timodel) { 90 class_<tivars::TIModel>("TIModel") 91 .constructor<>() 92 .constructor<int, const std::string&, uint, const std::string&>() 93 94 .function("getOrderId" , &tivars::TIModel::getOrderId) 95 .function("getName" , &tivars::TIModel::getName) 96 .function("getFlags" , &tivars::TIModel::getFlags) 97 .function("getSig" , &tivars::TIModel::getSig) 98 .function("supportsType", &tivars::TIModel::supportsType) 99 100 .class_function("createFromFlags", &tivars::TIModel::createFromFlags) 101 .class_function("createFromName", &tivars::TIModel::createFromName) 102 .class_function("createFromSignature", &tivars::TIModel::createFromSignature) 103 ; 104 } 105 #endif 106