KDECore
ktraderparse.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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