summaryrefslogtreecommitdiffstats
path: root/tdeio/tdeio/ktraderparsetree.h
diff options
context:
space:
mode:
Diffstat (limited to 'tdeio/tdeio/ktraderparsetree.h')
-rw-r--r--tdeio/tdeio/ktraderparsetree.h371
1 files changed, 371 insertions, 0 deletions
diff --git a/tdeio/tdeio/ktraderparsetree.h b/tdeio/tdeio/ktraderparsetree.h
new file mode 100644
index 000000000..a08b61a5a
--- /dev/null
+++ b/tdeio/tdeio/ktraderparsetree.h
@@ -0,0 +1,371 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __parse_tree_h__
+#define __parse_tree_h__
+
+#include <tqstring.h>
+#include <tqstringlist.h>
+#include <tqvaluelist.h>
+#include <tqmap.h>
+#include <tqshared.h>
+
+#include <kservice.h>
+#include <kuserprofile.h>
+
+#include "ktrader.h"
+
+namespace TDEIO {
+
+class ParseTreeBase;
+
+/** \internal */
+struct TDEIO_EXPORT PreferencesReturn
+{
+ enum Type { PRT_DOUBLE, PRT_ERROR };
+
+ PreferencesReturn() { type = PRT_ERROR; }
+
+ PreferencesReturn( const PreferencesReturn& _r )
+ {
+ type = _r.type;
+ f = _r.f;
+ }
+
+ Type type;
+ double f;
+};
+
+
+/**
+ * @internal
+ * @return 0 => Does not match
+ * 1 => Does match
+ * <0 => Error
+ */
+TDEIO_EXPORT int matchConstraint( const ParseTreeBase *_tree, const KService::Ptr &,
+ const KServiceTypeProfile::OfferList& );
+
+/**
+ * @internal
+ * @return 1 on success or <0 on Error
+ */
+TDEIO_EXPORT PreferencesReturn matchPreferences( const ParseTreeBase *_tree, const KService::Ptr &,
+ const KServiceTypeProfile::OfferList& );
+
+/**
+ * @internal
+ */
+struct TDEIO_EXPORT PreferencesMaxima
+{
+ enum Type { PM_ERROR, PM_INVALID_INT, PM_INVALID_DOUBLE, PM_DOUBLE, PM_INT };
+
+ Type type;
+ int iMax;
+ int iMin;
+ double fMax;
+ double fMin;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseContext
+{
+public:
+ /**
+ * This is NOT a copy constructor.
+ */
+ ParseContext( const ParseContext* _ctx ) : service( _ctx->service ), maxima( _ctx->maxima ),
+ offers( _ctx->offers ) {}
+ ParseContext( const KService::Ptr & _service, const KServiceTypeProfile::OfferList& _offers,
+ TQMap<TQString,PreferencesMaxima>& _m )
+ : service( _service ), maxima( _m ), offers( _offers ) {}
+
+ bool initMaxima( const TQString& _prop);
+
+ enum Type { T_STRING = 1, T_DOUBLE = 2, T_NUM = 3, T_BOOL = 4,
+ T_STR_SEQ = 5, T_SEQ = 6 };
+
+ TQString str;
+ int i;
+ double f;
+ bool b;
+ TQValueList<TQVariant> seq;
+ TQStringList strSeq;
+ Type type;
+
+ KService::Ptr service;
+
+ TQMap<TQString,PreferencesMaxima>& maxima;
+ const KServiceTypeProfile::OfferList& offers;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeBase : public KShared
+{
+public:
+ typedef KSharedPtr<ParseTreeBase> Ptr;
+ ParseTreeBase() { }
+
+ virtual bool eval( ParseContext *_context ) const = 0;
+protected:
+ virtual ~ParseTreeBase() { };
+};
+
+TDEIO_EXPORT ParseTreeBase::Ptr parseConstraints( const TQString& _constr );
+TDEIO_EXPORT ParseTreeBase::Ptr parsePreferences( const TQString& _prefs );
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeOR : public ParseTreeBase
+{
+public:
+ ParseTreeOR( ParseTreeBase *_ptr1, ParseTreeBase *_ptr2 ) { m_pLeft = _ptr1; m_pRight = _ptr2; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+ ParseTreeBase::Ptr m_pRight;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeAND : public ParseTreeBase
+{
+public:
+ ParseTreeAND( ParseTreeBase *_ptr1, ParseTreeBase *_ptr2 ) { m_pLeft = _ptr1; m_pRight = _ptr2; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+ ParseTreeBase::Ptr m_pRight;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeCMP : public ParseTreeBase
+{
+public:
+ ParseTreeCMP( ParseTreeBase *_ptr1, ParseTreeBase *_ptr2, int _i ) { m_pLeft = _ptr1; m_pRight = _ptr2; m_cmd = _i; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+ ParseTreeBase::Ptr m_pRight;
+ int m_cmd;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeIN : public ParseTreeBase
+{
+public:
+ ParseTreeIN( ParseTreeBase *_ptr1, ParseTreeBase *_ptr2 ) { m_pLeft = _ptr1; m_pRight = _ptr2; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+ ParseTreeBase::Ptr m_pRight;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeMATCH : public ParseTreeBase
+{
+public:
+ ParseTreeMATCH( ParseTreeBase *_ptr1, ParseTreeBase *_ptr2 ) { m_pLeft = _ptr1; m_pRight = _ptr2; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+ ParseTreeBase::Ptr m_pRight;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeCALC : public ParseTreeBase
+{
+public:
+ ParseTreeCALC( ParseTreeBase *_ptr1, ParseTreeBase *_ptr2, int _i ) { m_pLeft = _ptr1; m_pRight = _ptr2; m_cmd = _i; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+ ParseTreeBase::Ptr m_pRight;
+ int m_cmd;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeBRACKETS : public ParseTreeBase
+{
+public:
+ ParseTreeBRACKETS( ParseTreeBase *_ptr ) { m_pLeft = _ptr; }
+
+ bool eval( ParseContext *_context ) const { return m_pLeft->eval( _context ); }
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeNOT : public ParseTreeBase
+{
+public:
+ ParseTreeNOT( ParseTreeBase *_ptr ) { m_pLeft = _ptr; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ ParseTreeBase::Ptr m_pLeft;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeEXIST : public ParseTreeBase
+{
+public:
+ ParseTreeEXIST( const char *_id ) { m_id = _id; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ TQString m_id;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeID : public ParseTreeBase
+{
+public:
+ ParseTreeID( const char *arg ) { m_str = arg; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ TQString m_str;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeSTRING : public ParseTreeBase
+{
+public:
+ ParseTreeSTRING( const char *arg ) { m_str = arg; }
+
+ bool eval( ParseContext *_context ) const { _context->type = ParseContext::T_STRING; _context->str = m_str; return true; }
+
+protected:
+ TQString m_str;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeNUM : public ParseTreeBase
+{
+public:
+ ParseTreeNUM( int arg ) { m_int = arg; }
+
+ bool eval( ParseContext *_context ) const { _context->type = ParseContext::T_NUM; _context->i = m_int; return true; }
+
+protected:
+ int m_int;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeDOUBLE : public ParseTreeBase
+{
+public:
+ ParseTreeDOUBLE( double arg ) { m_double = arg; }
+
+ bool eval( ParseContext *_context ) const { _context->type = ParseContext::T_DOUBLE; _context->f = m_double; return true; }
+
+protected:
+ double m_double;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeBOOL : public ParseTreeBase
+{
+public:
+ ParseTreeBOOL( bool arg ) { m_bool = arg; }
+
+ bool eval( ParseContext *_context ) const { _context->type = ParseContext::T_BOOL; _context->b = m_bool; return true; }
+
+protected:
+ bool m_bool;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeMAX2 : public ParseTreeBase
+{
+public:
+ ParseTreeMAX2( const char *_id ) { m_strId = _id; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ TQString m_strId;
+};
+
+/**
+ * @internal
+ */
+class TDEIO_EXPORT ParseTreeMIN2 : public ParseTreeBase
+{
+public:
+ ParseTreeMIN2( const char *_id ) { m_strId = _id; }
+
+ bool eval( ParseContext *_context ) const;
+
+protected:
+ TQString m_strId;
+};
+
+}
+
+#endif