source: dev/trunk/jenga/include/smoothie/Method.h@ 203

Last change on this file since 203 was 203, checked in by dai_9181, 17 years ago

jengaライブラリに一通りserializeメソッドを仕込んだ

File size: 4.3 KB
Line 
1#pragma once
2
3#include <string>
4#include <vector>
5
6#include <windows.h>
7
8#include "Class.h"
9#include "Procedure.h"
10
11using namespace std;
12
13class UserProc;
14class CClass;
15void SetError();
16
17class CMethod : public MemberPrototype
18{
19
20 // XMLシリアライズ用
21 // TODO: xml実装
22private:
23 friend class boost::serialization::access;
24 template<class Archive> void serialize(Archive& ar, const unsigned int version)
25 {
26 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MemberPrototype );
27 //ar & BOOST_SERIALIZATION_NVP( pUserProc );
28 }
29
30public:
31 UserProc *pUserProc;
32
33 CMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
34 : MemberPrototype( accessibility )
35 , pUserProc( pUserProc )
36 {
37 }
38
39 virtual bool IsAbstract() const = 0;
40 virtual void Override() = 0;
41 virtual bool IsVirtual() const = 0;
42 virtual bool IsConst() const = 0;
43 virtual bool IsStatic() const = 0;
44 virtual const CClass *GetInheritsClassPtr() const = 0;
45 virtual void SetInheritsClassPtr( const CClass *pInheritsClass ) = 0;
46};
47
48class DynamicMethod : public CMethod
49{
50 bool isAbstract;
51 bool isVirtual;
52 bool isConst;
53 const CClass *pInheritsClass;
54
55 // XMLシリアライズ用
56 // TODO: xml実装
57private:
58 friend class boost::serialization::access;
59 template<class Archive> void serialize(Archive& ar, const unsigned int version)
60 {
61 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
62 ar & BOOST_SERIALIZATION_NVP( isAbstract );
63 ar & BOOST_SERIALIZATION_NVP( isVirtual );
64 ar & BOOST_SERIALIZATION_NVP( isConst );
65 //ar & BOOST_SERIALIZATION_NVP( pInheritsClass );
66 }
67
68public:
69 DynamicMethod( UserProc *pUserProc, Prototype::Accessibility accessibility, bool isAbstract, bool isVirtual, bool isConst, const CClass *pInheritsClass = NULL )
70 : CMethod( pUserProc, accessibility )
71 , isAbstract( isAbstract )
72 , isVirtual( isVirtual )
73 , isConst( isConst )
74 , pInheritsClass( pInheritsClass )
75 {
76 }
77 DynamicMethod( const CMethod &method )
78 : CMethod( method.pUserProc, method.GetAccessibility() )
79 , isAbstract( method.IsAbstract() )
80 , isVirtual( method.IsVirtual() )
81 , isConst( method.IsConst() )
82 , pInheritsClass( method.GetInheritsClassPtr() )
83 {
84 }
85
86 virtual bool IsAbstract() const
87 {
88 return isAbstract;
89 }
90 virtual void Override()
91 {
92 isAbstract = false;
93 }
94 virtual bool IsVirtual() const
95 {
96 return isVirtual;
97 }
98 virtual bool IsConst() const
99 {
100 return isConst;
101 }
102 virtual bool IsStatic() const
103 {
104 return false;
105 }
106 virtual const CClass *GetInheritsClassPtr() const
107 {
108 return pInheritsClass;
109 }
110 virtual void SetInheritsClassPtr( const CClass *pInheritsClass )
111 {
112 this->pInheritsClass = pInheritsClass;
113 }
114};
115class StaticMethod : public CMethod
116{
117 // XMLシリアライズ用
118private:
119 friend class boost::serialization::access;
120 template<class Archive> void serialize(Archive& ar, const unsigned int version)
121 {
122 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
123 }
124
125public:
126 StaticMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
127 : CMethod( pUserProc, accessibility )
128 {
129 }
130
131 virtual bool IsAbstract() const{SetError();return false;}
132 virtual void Override(){SetError();}
133 virtual bool IsVirtual() const{
134 return false;
135 }
136 virtual bool IsConst() const{SetError();return false;}
137 virtual bool IsStatic() const
138 {
139 return true;
140 }
141 virtual const CClass *GetInheritsClassPtr() const{SetError();return NULL;}
142 virtual void SetInheritsClassPtr( const CClass *pInheritsClass ){SetError();}
143};
144
145class Methods : public vector<CMethod *>
146{
147 // XMLシリアライズ用
148 // TODO: xml実装
149private:
150 friend class boost::serialization::access;
151 template<class Archive> void serialize(Archive& ar, const unsigned int version)
152 {
153 ar & boost::serialization::make_nvp("vector_CMethod", boost::serialization::base_object<vector<CMethod *>>(*this));
154 }
155
156public:
157 Methods();
158 ~Methods();
159
160 //メンバ、メソッドの追加
161 void Add( UserProc *pUserProc, Prototype::Accessibility accessibility, bool isConst, bool isAbstract, bool isVirtual );
162 void AddStatic(UserProc *pUserProc,Prototype::Accessibility accessibility);
163
164 const CMethod *GetMethodPtr( UserProc *pUserProc ) const;
165 bool IsExist( const char *name ) const;
166 virtual void Enum( const char *methodName, vector<UserProc *> &subs ) const;
167 virtual void Enum( const BYTE idOperatorCalc, vector<UserProc *> &subs ) const;
168};
Note: See TracBrowser for help on using the repository browser.