1 #ifndef _KVI_KVS_PARAMETERPROCESSOR_H_ 2 #define _KVI_KVS_PARAMETERPROCESSOR_H_ 3 //============================================================================= 4 // 5 // File : KviKvsParameterProcessor.h 6 // Creation date : Sun 17 Apr 2005 16:47:09 by Szymon Stefanek 7 // 8 // This file is part of the KVIrc IRC client distribution 9 // Copyright (C) 2005-2010 Szymon Stefanek <pragma at kvirc dot net> 10 // 11 // This program is FREE software. You can redistribute it and/or 12 // modify it under the terms of the GNU General Public License 13 // as published by the Free Software Foundation; either version 2 14 // of the License, or (at your option) any later version. 15 // 16 // This program is distributed in the HOPE that it will be USEFUL, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 19 // See the GNU General Public License for more details. 20 // 21 // You should have received a copy of the GNU General Public License 22 // along with this program. If not, write to the Free Software Foundation, 23 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 24 // 25 //============================================================================= 26 27 #include "kvi_settings.h" 28 #include "KviKvsTypes.h" 29 30 class KviKvsHash; 31 class KviKvsArray; 32 class KviKvsArrayCast; 33 class KviKvsVariant; 34 class QStringList; 35 class QByteArray; 36 class QString; 37 38 // Data type: QString 39 // Default: QString() 40 enum KviKvsParameterTypeQString 41 { 42 KVS_PT_STRING = 0, 43 KVS_PT_NONEMPTYSTRING = 1 44 }; 45 46 // Data type: kvs_int_t 47 // Default: 0 48 enum KviKvsParameterTypeKvsIntT 49 { 50 KVS_PT_INT = 2, 51 KVS_PT_INTEGER = 2 52 }; 53 54 // Data type: kvs_uint_t 55 // Default: 0 56 enum KviKvsParameterTypeKvsUIntT 57 { 58 KVS_PT_UINT = 3, 59 KVS_PT_UNSIGNEDINTEGER = 3 60 }; 61 62 // Data type: kvs_real_t 63 // default: 0.0 64 enum KviKvsParameterTypeKvsRealT 65 { 66 KVS_PT_DOUBLE = 4, 67 KVS_PT_REAL = 4 68 }; 69 70 // Data type: bool 71 // default: false 72 enum KviKvsParameterTypeBool 73 { 74 KVS_PT_BOOL = 5, 75 KVS_PT_BOOLEAN = 5 76 }; 77 78 // Data type: KviKvsHash * 79 // default: 0 80 enum KviKvsParameterTypeKviKvsHashPointer 81 { 82 KVS_PT_HASH = 6 83 }; 84 85 // Data type: KviKvsArrayCast 86 // default empty cast 87 enum KviKvsParameterTypeKviKvsArrayCast 88 { 89 KVS_PT_ARRAYCAST = 7 90 }; 91 92 // Data type: KviKvsVariant * 93 // default: 0 94 enum KviKvsParameterTypeKviKvsVariantPointer 95 { 96 KVS_PT_VARIANT = 8 97 }; 98 99 // Data type: QByteArray 100 // default null string (0) 101 enum KviKvsParameterTypeQByteArray 102 { 103 KVS_PT_CSTRING = 9, 104 KVS_PT_NONEMPTYCSTRING = 10 105 }; 106 107 // Data type: QStringList 108 // default: list cleared 109 // This eats all the remaining params in the list! 110 enum KviKvsParameterTypeQStringList 111 { 112 KVS_PT_STRINGLIST = 11 113 }; 114 115 // Data type: KviKvsVariantList 116 // default: list cleared 117 // This eats all the remaining params in the list! 118 // The list has autodelete set to off since the copies are SHALLOW (as opposed to deep)! 119 enum KviKvsParameterTypeKviKvsVariantList 120 { 121 KVS_PT_VARIANTLIST = 12 122 }; 123 124 // Data type: kvs_hobject_t 125 // default: (kvs_hobject_t)0 126 enum KviKvsParameterTypeKvsHObjectT 127 { 128 KVS_PT_HOBJECT = 13 129 }; 130 131 // Data type: KviKvsArray * 132 // default 0 133 enum KviKvsParameterTypeKviKvsArrayPointer 134 { 135 KVS_PT_ARRAY = 14 136 }; 137 138 // Data type: ignored 139 #define KVS_PT_IGNORE 15 140 141 // If omitted, set to default 142 #define KVS_PF_OPTIONAL 1 143 // Valid only for string types: it's the last parameter that eats all the remaining ones 144 #define KVS_PF_APPENDREMAINING 2 145 146 class KviKvsVariantList; 147 class KviKvsRunTimeContext; 148 149 namespace KviKvsParameterProcessor 150 { 151 class KVIRC_API ParameterFormat 152 { 153 public: 154 const char * szName; 155 unsigned char uType; 156 unsigned char uFlags; 157 void * pContainer; 158 159 public: 160 // KVS_PT_STRING, KVS_PT_NONEMPTYSTRING ParameterFormat(const char * name,KviKvsParameterTypeQString type,unsigned char flags,QString & szBuffer)161 ParameterFormat(const char * name, KviKvsParameterTypeQString type, unsigned char flags, QString & szBuffer) 162 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&szBuffer)){}; 163 164 // KVS_PT_INTEGER (KVS_PT_INT) ParameterFormat(const char * name,KviKvsParameterTypeKvsIntT type,unsigned char flags,kvs_int_t & iBuffer)165 ParameterFormat(const char * name, KviKvsParameterTypeKvsIntT type, unsigned char flags, kvs_int_t & iBuffer) 166 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&iBuffer)){}; 167 168 // KVS_PT_UNSIGNEDINTEGER (KVS_PT_UINT) ParameterFormat(const char * name,KviKvsParameterTypeKvsUIntT type,unsigned char flags,kvs_uint_t & uBuffer)169 ParameterFormat(const char * name, KviKvsParameterTypeKvsUIntT type, unsigned char flags, kvs_uint_t & uBuffer) 170 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&uBuffer)){}; 171 172 // KVS_PT_DOUBLE (KVS_PT_REAL) ParameterFormat(const char * name,KviKvsParameterTypeKvsRealT type,unsigned char flags,kvs_real_t & dBuffer)173 ParameterFormat(const char * name, KviKvsParameterTypeKvsRealT type, unsigned char flags, kvs_real_t & dBuffer) 174 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&dBuffer)){}; 175 176 // KVS_PT_BOOL (KVS_PT_BOOLEAN) ParameterFormat(const char * name,KviKvsParameterTypeBool type,unsigned char flags,bool & bBuffer)177 ParameterFormat(const char * name, KviKvsParameterTypeBool type, unsigned char flags, bool & bBuffer) 178 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&bBuffer)){}; 179 180 // KVS_PT_HASH ParameterFormat(const char * name,KviKvsParameterTypeKviKvsHashPointer type,unsigned char flags,KviKvsHash * & pBuffer)181 ParameterFormat(const char * name, KviKvsParameterTypeKviKvsHashPointer type, unsigned char flags, KviKvsHash *& pBuffer) 182 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&pBuffer)){}; 183 184 // KVS_PT_ARRAYCAST ParameterFormat(const char * name,KviKvsParameterTypeKviKvsArrayCast type,unsigned char flags,KviKvsArrayCast & oBuffer)185 ParameterFormat(const char * name, KviKvsParameterTypeKviKvsArrayCast type, unsigned char flags, KviKvsArrayCast & oBuffer) 186 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&oBuffer)){}; 187 188 // KVS_PT_VARIANT ParameterFormat(const char * name,KviKvsParameterTypeKviKvsVariantPointer type,unsigned char flags,KviKvsVariant * & pBuffer)189 ParameterFormat(const char * name, KviKvsParameterTypeKviKvsVariantPointer type, unsigned char flags, KviKvsVariant *& pBuffer) 190 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&pBuffer)){}; 191 192 // KVS_PT_CSTRING, KVS_PT_NONEMPTYCSTRING ParameterFormat(const char * name,KviKvsParameterTypeQByteArray type,unsigned char flags,QByteArray & szBuffer)193 ParameterFormat(const char * name, KviKvsParameterTypeQByteArray type, unsigned char flags, QByteArray & szBuffer) 194 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&szBuffer)){}; 195 196 // KVS_PT_STRINGLIST ParameterFormat(const char * name,KviKvsParameterTypeQStringList type,unsigned char flags,QStringList & lBuffer)197 ParameterFormat(const char * name, KviKvsParameterTypeQStringList type, unsigned char flags, QStringList & lBuffer) 198 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&lBuffer)){}; 199 200 // KVS_PT_VARIANTLIST ParameterFormat(const char * name,KviKvsParameterTypeKviKvsVariantList type,unsigned char flags,KviKvsVariantList & lBuffer)201 ParameterFormat(const char * name, KviKvsParameterTypeKviKvsVariantList type, unsigned char flags, KviKvsVariantList & lBuffer) 202 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&lBuffer)){}; 203 204 // KVS_PT_HOBJECT ParameterFormat(const char * name,KviKvsParameterTypeKvsHObjectT type,unsigned char flags,kvs_hobject_t & hBuffer)205 ParameterFormat(const char * name, KviKvsParameterTypeKvsHObjectT type, unsigned char flags, kvs_hobject_t & hBuffer) 206 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&hBuffer)){}; 207 208 // KVS_PT_ARRAY ParameterFormat(const char * name,KviKvsParameterTypeKviKvsArrayPointer type,unsigned char flags,KviKvsArray * & pBuffer)209 ParameterFormat(const char * name, KviKvsParameterTypeKviKvsArrayPointer type, unsigned char flags, KviKvsArray *& pBuffer) 210 : szName(name), uType((unsigned char)type), uFlags(flags), pContainer((void *)(&pBuffer)){}; 211 212 // KVS_PT_IGNORE ParameterFormat(const char * name)213 ParameterFormat(const char * name) 214 : szName(name), uType(KVS_PT_IGNORE), uFlags(0), pContainer(nullptr) {} 215 216 // terminator ParameterFormat()217 ParameterFormat() 218 : szName(nullptr), uType(KVS_PT_IGNORE), uFlags(0), pContainer(nullptr){}; 219 220 //ParameterFormat(const char * n,unsigned char t,unsigned char f,void * p) 221 //: szName(n), uType(t), uFlags(f), pContainer(p) {}; 222 }; 223 224 KVIRC_API bool process(KviKvsVariantList * pVariantList, KviKvsRunTimeContext * pContext, KviKvsParameterProcessor::ParameterFormat * pFmtArray); 225 } 226 227 #define KVS_PARAMETERS_BEGIN(__name) \ 228 KviKvsParameterProcessor::ParameterFormat __name[] = { 229 230 #define KVS_PARAMETERS_END \ 231 KviKvsParameterProcessor::ParameterFormat(nullptr) \ 232 } \ 233 ; 234 235 //#define KVS_PARAMETER(__name,__type,__flags,__void) 236 // KviKvsParameterProcessor::ParameterFormat(__name,__type,__flags,((void *)(&(__void)))), 237 238 #define KVS_PARAMETER(__name, __type, __flags, __param) \ 239 KviKvsParameterProcessor::ParameterFormat(__name, __type, __flags, __param), 240 241 #define KVS_PARAMETER_IGNORED(__name) \ 242 KviKvsParameterProcessor::ParameterFormat(__name), 243 244 #endif //!_KVI_KVS_PARAMETERPROCESSOR_H_ 245