EvEmu  0.8.4
11 September 2021
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
PyVisitor.h
Go to the documentation of this file.
1 /*
2  ------------------------------------------------------------------------------------
3  LICENSE:
4  ------------------------------------------------------------------------------------
5  This file is part of EVEmu: EVE Online Server Emulator
6  Copyright 2006 - 2021 The EVEmu Team
7  For the latest information visit https://evemu.dev
8  ------------------------------------------------------------------------------------
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13 
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
17 
18  You should have received a copy of the GNU Lesser General Public License along with
19  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20  Place - Suite 330, Boston, MA 02111-1307, USA, or go to
21  http://www.gnu.org/copyleft/lesser.txt.
22  ------------------------------------------------------------------------------------
23  Author: Zhur, mmcs, Bloody.Rabbit
24 */
25 
26 #ifndef __PY_VISITOR_H__INCL__
27 #define __PY_VISITOR_H__INCL__
28 
29 class PyRep;
30 class PyInt;
31 class PyLong;
32 class PyFloat;
33 class PyBool;
34 class PyNone;
35 class PyBuffer;
36 class PyString;
37 class PyWString;
38 class PyToken;
39 class PyObject;
40 class PyObjectEx;
41 class PySubStruct;
42 class PySubStream;
43 class PyChecksumedStream;
44 class PyDict;
45 class PyList;
46 class PyTuple;
47 class PyPackedRow;
48 
49 class PyVisitor
50 {
51 public:
52  virtual ~PyVisitor() {}
53 
55  virtual bool VisitInteger( const PyInt* rep ) { return true; }
56  virtual bool VisitLong( const PyLong* rep ) { return true; }
57  virtual bool VisitReal( const PyFloat* rep ) { return true; }
58  virtual bool VisitBoolean( const PyBool* rep ) { return true; }
59  virtual bool VisitNone( const PyNone* rep ) { return true; }
60  virtual bool VisitBuffer( const PyBuffer* rep ) { return true; }
61  virtual bool VisitString( const PyString* rep ) { return true; }
62  virtual bool VisitWString( const PyWString* rep ) { return true; }
63  virtual bool VisitToken( const PyToken* rep ) { return true; }
64 
66  virtual bool VisitTuple( const PyTuple* rep );
67  virtual bool VisitList( const PyList* rep );
68  virtual bool VisitDict( const PyDict* rep );
69 
71  virtual bool VisitObject( const PyObject* rep );
72  virtual bool VisitObjectEx( const PyObjectEx* rep );
73 
75  virtual bool VisitPackedRow( const PyPackedRow* rep );
76 
78  virtual bool VisitSubStruct( const PySubStruct* rep );
79  virtual bool VisitSubStream( const PySubStream* rep );
80  virtual bool VisitChecksumedStream( const PyChecksumedStream* rep );
81 };
82 
83 class PyPfxVisitor : public PyVisitor
84 {
85 public:
86  PyPfxVisitor( const char* pfx = "" );
87 
88 protected:
89  const char* _pfx() const { return mPfxStack.top().c_str(); }
90  void _pfxExtend( const char* fmt, ... );
91  void _pfxWithdraw() { mPfxStack.pop(); }
92 
93  std::stack<std::string> mPfxStack;
94 };
95 
96 #endif /* !__PY_VISITOR_H__INCL__ */
Base Python wire object.
Definition: PyRep.h:66
virtual bool VisitNone(const PyNone *rep)
Definition: PyVisitor.h:59
virtual bool VisitTuple(const PyTuple *rep)
the nested types Visitor
Definition: PyVisitor.cpp:36
void _pfxExtend(const char *fmt,...)
Definition: PyVisitor.cpp:148
Python string.
Definition: PyRep.h:430
virtual bool VisitSubStream(const PySubStream *rep)
Definition: PyVisitor.cpp:119
Python's dictionary.
Definition: PyRep.h:719
virtual bool VisitDict(const PyDict *rep)
Definition: PyVisitor.cpp:57
virtual bool VisitPackedRow(const PyPackedRow *rep)
PackedRow type visitor.
Definition: PyVisitor.cpp:99
virtual bool VisitString(const PyString *rep)
Definition: PyVisitor.h:61
virtual bool VisitWString(const PyWString *rep)
Definition: PyVisitor.h:62
Python floating point number.
Definition: PyRep.h:292
Python wide string.
Definition: PyRep.h:475
void _pfxWithdraw()
Definition: PyVisitor.h:91
virtual bool VisitToken(const PyToken *rep)
Definition: PyVisitor.h:63
Python tuple.
Definition: PyRep.h:567
std::stack< std::string > mPfxStack
Definition: PyVisitor.h:93
virtual bool VisitReal(const PyFloat *rep)
Definition: PyVisitor.h:57
virtual bool VisitLong(const PyLong *rep)
Definition: PyVisitor.h:56
Python boolean.
Definition: PyRep.h:323
virtual bool VisitObjectEx(const PyObjectEx *rep)
Definition: PyVisitor.cpp:78
Python extended object.
Definition: PyRep.h:861
Python object.
Definition: PyRep.h:826
Python's "none".
Definition: PyRep.h:352
virtual bool VisitBoolean(const PyBool *rep)
Definition: PyVisitor.h:58
virtual bool VisitSubStruct(const PySubStruct *rep)
wrapper types Visitor
Definition: PyVisitor.cpp:112
Python integer.
Definition: PyRep.h:231
virtual bool VisitInteger(const PyInt *rep)
primitive data visitors
Definition: PyVisitor.h:55
Python token (eg. class name).
Definition: PyRep.h:522
PyPfxVisitor(const char *pfx="")
Definition: PyVisitor.cpp:143
virtual bool VisitObject(const PyObject *rep)
Object type visitor.
Definition: PyVisitor.cpp:69
Python buffer.
Definition: PyRep.h:382
Packed row.
Definition: PyRep.h:961
virtual bool VisitBuffer(const PyBuffer *rep)
Definition: PyVisitor.h:60
const char * _pfx() const
Definition: PyVisitor.h:89
virtual bool VisitList(const PyList *rep)
Definition: PyVisitor.cpp:47
Python list.
Definition: PyRep.h:639
Python long integer.
Definition: PyRep.h:261
virtual ~PyVisitor()
Definition: PyVisitor.h:52
virtual bool VisitChecksumedStream(const PyChecksumedStream *rep)
Definition: PyVisitor.cpp:133