ArtMOO
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
G:/dev/qt/MOO/ServerCore/verb.h
Go to the documentation of this file.
00001 #ifndef VERB_H
00002 #define VERB_H
00003 
00004 #include <QString>
00005 #include <QDataStream>
00006 #include <QStringList>
00007 
00008 #include <lua.hpp>
00009 
00010 #include "mooglobal.h"
00011 #include "func.h"
00012 
00013 class Verb : public Func
00014 {
00015 public:
00016         void save( QDataStream &pData ) const;
00017         void load( QDataStream &pData );
00018 
00019         void initialise();
00020 
00021         typedef enum ArgObj
00022         {
00023                 THIS, ANY, NONE
00024         } ArgObj;
00025 
00026         static QStringList parse( const QString &pInput, QString &pArgStr );
00027 
00028         static bool matchName( const QString &pPattern, const QString &pMatch );
00029 
00030         bool matchPreposition( const QString &pPreposition );
00031 
00032         bool matchArgs( ObjectId pObjectId, ObjectId DirectObjectId, const QString &pPreposition, ObjectId IndirectObjectId );
00033 
00034 public:
00035         inline ArgObj directObject( void ) const
00036         {
00037                 return( mDirectObject );
00038         }
00039 
00040         inline ArgObj indirectObject( void ) const
00041         {
00042                 return( mIndirectObject );
00043         }
00044 
00045         inline const QString &preposition( void ) const
00046         {
00047                 return( mPreposition );
00048         }
00049 
00050         inline ArgObj prepositionType( void ) const
00051         {
00052                 return( mPrepositionType );
00053         }
00054 
00055         inline void setDirectObjectArgument( ArgObj pArg )
00056         {
00057                 mDirectObject = pArg;
00058         }
00059 
00060         inline void setIndirectObjectArgument( ArgObj pArg )
00061         {
00062                 mIndirectObject = pArg;
00063         }
00064 
00065         inline void setPrepositionArgument( ArgObj pArg )
00066         {
00067                 Q_ASSERT( pArg == Verb::ANY || pArg == Verb::NONE );
00068 
00069                 mPrepositionType = pArg;
00070                 mPreposition.clear();
00071         }
00072 
00073         inline void setPrepositionArgument( const QString &pArg )
00074         {
00075                 mPrepositionType = Verb::THIS;
00076                 mPreposition = pArg;
00077         }
00078 
00079         const QString &aliases( void ) const
00080         {
00081                 return( mAliases );
00082         }
00083 
00084         void addAlias( const QString &pAlias );
00085         void remAlias( const QString &pAlias );
00086 
00087 private:
00088         ArgObj                  mDirectObject;
00089         ArgObj                  mIndirectObject;
00090         ArgObj                  mPrepositionType;
00091         QString                 mPreposition;
00092         QString                 mAliases;
00093 };
00094 
00095 
00096 #endif // VERB_H