1 /* 2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab 3 * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET 4 * 5 * Copyright (C) 2012 - 2016 - Scilab Enterprises 6 * 7 * This file is hereby licensed under the terms of the GNU GPL v2.0, 8 * pursuant to article 5.3.4 of the CeCILL v.2.1. 9 * This file was originally licensed under the terms of the CeCILL v2.1, 10 * and continues to be available under such terms. 11 * For more information, see the COPYING file which you should have received 12 * along with this program. 13 * 14 */ 15 16 #ifndef __XMLRHSVALUE_HXX__ 17 #define __XMLRHSVALUE_HXX__ 18 19 #include "xmlObjects.h" 20 21 extern "C" 22 { 23 #include "Scierror.h" 24 #include "api_scilab.h" 25 #include "xml_mlist.h" 26 } 27 28 namespace org_modules_xml 29 { 30 31 /** 32 * @file 33 * @author Calixte DENIZET <calixte.denizet@scilab.org> 34 * 35 * Base class for the XML objects. 36 */ 37 class XMLRhsValue 38 { 39 40 public: 41 /** 42 * @anchor get 43 * @param fname the function name 44 * @param addr the Scilab's variable address 45 * @param obj a pointer to the object to retrieve 46 * @return true if all is ok 47 */ get(char * fname,int * addr,XMLDocument ** obj,void * pvApiCtx)48 static bool get(char *fname, int *addr, XMLDocument ** obj, void *pvApiCtx) 49 { 50 return get < XMLDocument > (fname, addr, obj, pvApiCtx); 51 } 52 53 /** 54 * @ref get 55 */ get(char * fname,int * addr,XMLElement ** obj,void * pvApiCtx)56 static bool get(char *fname, int *addr, XMLElement ** obj, void *pvApiCtx) 57 { 58 return get < XMLElement > (fname, addr, obj, pvApiCtx); 59 } 60 61 /** 62 * @ref get 63 */ get(char * fname,int * addr,XMLAttr ** obj,void * pvApiCtx)64 static bool get(char *fname, int *addr, XMLAttr ** obj, void *pvApiCtx) 65 { 66 return get < XMLAttr > (fname, addr, obj, pvApiCtx); 67 } 68 69 /** 70 * @ref get 71 */ get(char * fname,int * addr,XMLNs ** obj,void * pvApiCtx)72 static bool get(char *fname, int *addr, XMLNs ** obj, void *pvApiCtx) 73 { 74 return get < XMLNs > (fname, addr, obj, pvApiCtx); 75 } 76 77 /** 78 * @ref get 79 */ get(char * fname,int * addr,XMLNodeList ** obj,void * pvApiCtx)80 static bool get(char *fname, int *addr, XMLNodeList ** obj, void *pvApiCtx) 81 { 82 return get < XMLNodeList > (fname, addr, obj, pvApiCtx); 83 } 84 85 /** 86 * @ref get 87 */ get(char * fname,int * addr,std::string ** obj,void * pvApiCtx)88 static bool get(char *fname, int *addr, std::string ** obj, void *pvApiCtx) 89 { 90 char **str = 0; 91 int row = 0; 92 int col = 0; 93 94 std::string * code = new std::string(""); 95 96 if (getAllocatedMatrixOfString(pvApiCtx, addr, &row, &col, &str)) 97 { 98 delete code; 99 return false; 100 } 101 102 for (int i = 0; i < row; i++) 103 { 104 for (int j = 0; j < col; j++) 105 { 106 *code += str[i + row * j]; 107 } 108 109 if (i != row - 1) 110 { 111 *code += "\n"; 112 } 113 } 114 freeAllocatedMatrixOfString(row, col, str); 115 *obj = code; 116 117 return true; 118 } 119 120 private: 121 122 /** 123 * @ref get 124 */ get(char * fname,int * addr,T ** obj,void * pvApiCtx)125 template < class T > static bool get(char *fname, int *addr, T ** obj, void *pvApiCtx) 126 { 127 int id = getXMLObjectId(addr, pvApiCtx); 128 129 *obj = XMLObject::getFromId < T > (id); 130 if (!*obj) 131 { 132 Scierror(999, "%s: XML object does not exist\n", fname); 133 return false; 134 } 135 136 return true; 137 } 138 }; 139 } 140 141 #endif 142