source: dev/trunk/jenga/include/smoothie/Member.h@ 170

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

ベースを作成中...

File size: 2.2 KB
Line 
1#pragma once
2
3#include <string>
4#include <vector>
5
6#include "Type.h"
7#include "Class.h"
8#include "Source.h"
9
10using namespace std;
11
12class CClass;
13
14class CMember : public MemberPrototype
15{
16 string name;
17 Type type;
18 bool isConst;
19
20 string initializeExpression;
21 string constructParameter;
22public:
23 int SubScripts[MAX_ARRAYDIM];
24
25 int source_code_address;
26
27 const string &GetName() const
28 {
29 return name;
30 }
31 void SetName( const string &name )
32 {
33 this->name = name;
34 }
35
36 Type GetType() const
37 {
38 return type;
39 }
40
41 bool IsConst()
42 {
43 return isConst;
44 }
45
46 const string &GetInitializeExpression() const
47 {
48 return initializeExpression;
49 }
50 const string &GetConstructParameter() const
51 {
52 return constructParameter;
53 }
54
55 CMember( Prototype::Accessibility accessibility, const string &name, const Type &type, bool isConst )
56 : MemberPrototype( accessibility )
57 , name( name )
58 , type( type )
59 , isConst( isConst )
60 {
61 }
62 CMember( CClass *pobj_c, Prototype::Accessibility accessibility, bool idConst, bool isRef, char *buffer, int nowLine=-1 );
63 CMember( CMember &member );
64 ~CMember();
65 static void InitStaticMember(void);
66
67 static bool SplitName( const char *desc, char *object, char *member, CClass::RefType &refType ){
68 int lastIndex = -1;
69 for( int i=0; desc[i]; i++ ){
70 if( desc[i] == '(' ){
71 i=BasicSource::JumpStringInPare(desc,i+1);
72 continue;
73 }
74 else if( desc[i] == '[' ){
75 i=BasicSource::JumpStringInBracket(desc,i+1);
76 continue;
77 }
78 else if(desc[i]=='.'||(desc[i]==1&&desc[i+1]==ESC_PSMEM)){
79 lastIndex = i;
80 }
81 }
82 if( lastIndex == -1 ){
83 lstrcpy( member, desc );
84 return false;
85 }
86
87 if(desc[lastIndex]=='.'){
88 lstrcpy(member,desc+lastIndex+1);
89 refType = CClass::Dot;
90 }
91 else{
92 lstrcpy(member,desc+lastIndex+2);
93 refType = CClass::Pointer;
94 }
95
96 if( object ){
97 lstrcpy( object, desc );
98 object[lastIndex]=0;
99 }
100
101 return true;
102 }
103 static bool SplitName( const char *desc, char *object, char *member ){
104 CClass::RefType dummyRefType;
105 return SplitName( desc, object, member, dummyRefType );
106 }
107};
108typedef std::vector<CMember *> Members;
Note: See TracBrowser for help on using the repository browser.