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 using namespace KTraderParse;
00036
00037 K_GLOBAL_STATIC(ParseTreeBase::Ptr, pTree)
00038 static const char* sCode = 0;
00039
00040 ParseTreeBase::Ptr KTraderParse::parseConstraints( const QString& _constr )
00041 {
00042 const QByteArray buffer = _constr.toUtf8();
00043 sCode = buffer.constData();
00044 KTraderParse_mainParse( sCode );
00045 sCode = 0;
00046 assert( pTree );
00047 return *pTree;
00048 }
00049
00050 void KTraderParse_setParseTree( void *_ptr1 )
00051 {
00052 *pTree = static_cast<ParseTreeBase*>( _ptr1 );
00053 }
00054
00055
00056 void KTraderParse_error( const char* err )
00057 {
00058 kWarning(7014) << "Parsing '" << sCode << "' gave " << err;
00059 }
00060
00061 void* KTraderParse_newOR( void *_ptr1, void *_ptr2 )
00062 {
00063 return new ParseTreeOR( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2 );
00064 }
00065
00066 void* KTraderParse_newAND( void *_ptr1, void *_ptr2 )
00067 {
00068 return new ParseTreeAND( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2 );
00069 }
00070
00071 void* KTraderParse_newCMP( void *_ptr1, void *_ptr2, int _i )
00072 {
00073 return new ParseTreeCMP( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _i );
00074 }
00075
00076 void* KTraderParse_newIN( void *_ptr1, void *_ptr2, int _cs )
00077 {
00078 return new ParseTreeIN( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _cs == 1 ? Qt::CaseSensitive : Qt::CaseInsensitive );
00079 }
00080
00081 void* KTraderParse_newSubstringIN( void *_ptr1, void *_ptr2, int _cs )
00082 {
00083 return new ParseTreeIN((ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2,
00084 _cs == 1 ? Qt::CaseSensitive : Qt::CaseInsensitive, true);
00085 }
00086
00087 void* KTraderParse_newMATCH( void *_ptr1, void *_ptr2, int _cs )
00088 {
00089 return new ParseTreeMATCH( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _cs == 1 ? Qt::CaseSensitive : Qt::CaseInsensitive );
00090 }
00091
00092 void* KTraderParse_newCALC( void *_ptr1, void *_ptr2, int _i )
00093 {
00094 return new ParseTreeCALC( (ParseTreeBase*)_ptr1, (ParseTreeBase*)_ptr2, _i );
00095 }
00096
00097 void* KTraderParse_newBRACKETS( void *_ptr1 )
00098 {
00099 return new ParseTreeBRACKETS( (ParseTreeBase*)_ptr1 );
00100 }
00101
00102 void* KTraderParse_newNOT( void *_ptr1 )
00103 {
00104 return new ParseTreeNOT( (ParseTreeBase*)_ptr1 );
00105 }
00106
00107 void* KTraderParse_newEXIST( char *_ptr1 )
00108 {
00109 ParseTreeEXIST *t = new ParseTreeEXIST( _ptr1 );
00110 free(_ptr1);
00111 return t;
00112 }
00113
00114 void* KTraderParse_newID( char *_ptr1 )
00115 {
00116 ParseTreeID *t = new ParseTreeID( _ptr1 );
00117 free(_ptr1);
00118 return t;
00119 }
00120
00121 void* KTraderParse_newSTRING( char *_ptr1 )
00122 {
00123 ParseTreeSTRING *t = new ParseTreeSTRING( _ptr1 );
00124 free(_ptr1);
00125 return t;
00126 }
00127
00128 void* KTraderParse_newNUM( int _i )
00129 {
00130 return new ParseTreeNUM( _i );
00131 }
00132
00133 void* KTraderParse_newFLOAT( float _f )
00134 {
00135 return new ParseTreeDOUBLE( _f );
00136 }
00137
00138 void* KTraderParse_newBOOL( char _b )
00139 {
00140 return new ParseTreeBOOL( (bool)_b );
00141 }
00142
00143 void* KTraderParse_newMAX2( char *_id )
00144 {
00145 ParseTreeMAX2 *t = new ParseTreeMAX2( _id );
00146 free(_id);
00147 return t;
00148 }
00149
00150 void* KTraderParse_newMIN2( char *_id )
00151 {
00152 ParseTreeMIN2 *t = new ParseTreeMIN2( _id );
00153 free(_id);
00154 return t;
00155 }