KDECore
ktraderparse.cpp
Go to the documentation of this file.
00001 /* This file is part of the KDE project 00002 Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00017 Boston, MA 02110-1301, USA. 00018 */ 00019 00020 // TODO: Torben: On error free memory! (r932881 might serve as inspiration) 00021 00022 extern "C" 00023 { 00024 #include "ktraderparse_p.h" 00025 00026 void KTraderParse_mainParse( const char *_code ); 00027 } 00028 00029 #include "ktraderparsetree_p.h" 00030 00031 #include <assert.h> 00032 #include <stdlib.h> 00033 #include <kdebug.h> 00034 00035 #include <QtCore/QThreadStorage> 00036 00037 namespace KTraderParse 00038 { 00039 00040 struct ParsingData 00041 { 00042 ParseTreeBase::Ptr ptr; 00043 QByteArray buffer; 00044 }; 00045 00046 } 00047 00048 using namespace KTraderParse; 00049 00050 K_GLOBAL_STATIC(QThreadStorage<ParsingData *>, s_parsingData) 00051 00052 ParseTreeBase::Ptr KTraderParse::parseConstraints( const QString& _constr ) 00053 { 00054 ParsingData *data = new ParsingData(); 00055 s_parsingData->setLocalData(data); 00056 data->buffer = _constr.toUtf8(); 00057 KTraderParse_mainParse(data->buffer.constData()); 00058 ParseTreeBase::Ptr ret = data->ptr; 00059 s_parsingData->setLocalData(0); 00060 return ret; 00061 } 00062 00063 void KTraderParse_setParseTree( void *_ptr1 ) 00064 { 00065 ParsingData *data = s_parsingData->localData(); 00066 data->ptr = static_cast<ParseTreeBase*>(_ptr1); 00067 } 00068 00069 00070 void KTraderParse_error( const char* err ) 00071 { 00072 kWarning(7014) << "Parsing" << s_parsingData->localData()->buffer << "gave:" << err; 00073 } 00074 00075 void* KTraderParse_newOR( void *_ptr1, void *_ptr2 ) 00076 { 00077 return new ParseTreeOR( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2 ); 00078 } 00079 00080 void* KTraderParse_newAND( void *_ptr1, void *_ptr2 ) 00081 { 00082 return new ParseTreeAND( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2 ); 00083 } 00084 00085 void* KTraderParse_newCMP( void *_ptr1, void *_ptr2, int _i ) 00086 { 00087 return new ParseTreeCMP( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _i ); 00088 } 00089 00090 void* KTraderParse_newIN( void *_ptr1, void *_ptr2, int _cs ) 00091 { 00092 return new ParseTreeIN( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _cs == 1 ? Qt::CaseSensitive : Qt::CaseInsensitive ); 00093 } 00094 00095 void* KTraderParse_newSubstringIN( void *_ptr1, void *_ptr2, int _cs ) 00096 { 00097 return new ParseTreeIN((ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, 00098 _cs == 1 ? Qt::CaseSensitive : Qt::CaseInsensitive, true); 00099 } 00100 00101 void* KTraderParse_newMATCH( void *_ptr1, void *_ptr2, int _cs ) 00102 { 00103 return new ParseTreeMATCH( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _cs == 1 ? Qt::CaseSensitive : Qt::CaseInsensitive ); 00104 } 00105 00106 void* KTraderParse_newCALC( void *_ptr1, void *_ptr2, int _i ) 00107 { 00108 return new ParseTreeCALC( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _i ); 00109 } 00110 00111 void* KTraderParse_newBRACKETS( void *_ptr1 ) 00112 { 00113 return new ParseTreeBRACKETS( (ParseTreeBase*)_ptr1 ); 00114 } 00115 00116 void* KTraderParse_newNOT( void *_ptr1 ) 00117 { 00118 return new ParseTreeNOT( (ParseTreeBase*)_ptr1 ); 00119 } 00120 00121 void* KTraderParse_newEXIST( char *_ptr1 ) 00122 { 00123 ParseTreeEXIST *t = new ParseTreeEXIST( _ptr1 ); 00124 free(_ptr1); 00125 return t; 00126 } 00127 00128 void* KTraderParse_newID( char *_ptr1 ) 00129 { 00130 ParseTreeID *t = new ParseTreeID( _ptr1 ); 00131 free(_ptr1); 00132 return t; 00133 } 00134 00135 void* KTraderParse_newSTRING( char *_ptr1 ) 00136 { 00137 ParseTreeSTRING *t = new ParseTreeSTRING( _ptr1 ); 00138 free(_ptr1); 00139 return t; 00140 } 00141 00142 void* KTraderParse_newNUM( int _i ) 00143 { 00144 return new ParseTreeNUM( _i ); 00145 } 00146 00147 void* KTraderParse_newFLOAT( float _f ) 00148 { 00149 return new ParseTreeDOUBLE( _f ); 00150 } 00151 00152 void* KTraderParse_newBOOL( char _b ) 00153 { 00154 return new ParseTreeBOOL( (bool)_b ); 00155 } 00156 00157 void* KTraderParse_newMAX2( char *_id ) 00158 { 00159 ParseTreeMAX2 *t = new ParseTreeMAX2( _id ); 00160 free(_id); 00161 return t; 00162 } 00163 00164 void* KTraderParse_newMIN2( char *_id ) 00165 { 00166 ParseTreeMIN2 *t = new ParseTreeMIN2( _id ); 00167 free(_id); 00168 return t; 00169 } 00170 00171 void KTraderParse_destroy(void *node) 00172 { 00173 ParsingData *data = s_parsingData->localData(); 00174 ParseTreeBase *p = reinterpret_cast<ParseTreeBase *>(node); 00175 if (p != data->ptr) { 00176 delete p; 00177 } 00178 } 00179
KDE 4.6 API Reference