source: dev/trunk/abdev/BasicCompiler_Common/include/NamespaceSupporter.h@ 199

Last change on this file since 199 was 199, checked in by dai_9181, 17 years ago
File size: 2.7 KB
Line 
1#pragma once
2
3#include <jenga/include/smoothie/Namespace.h>
4
5class NamespaceSupporter
6{
7 // Importsされた名前空間
8 NamespaceScopesCollection importedNamespaces;
9
10 // 現在の名前空間
11 NamespaceScopes livingNamespaceScopes;
12
13public:
14 NamespaceScopesCollection &GetImportedNamespaces()
15 {
16 return importedNamespaces;
17 }
18 void SetImportedNamespaces( const NamespaceScopesCollection &namespaces )
19 {
20 this->importedNamespaces = namespaces;
21 }
22 bool ImportsNamespace( const std::string &namespaceStr );
23
24 NamespaceScopes &GetLivingNamespaceScopes()
25 {
26 return livingNamespaceScopes;
27 }
28 void SetLivingNamespaceScopes( const NamespaceScopes &namespaceScopes )
29 {
30 this->livingNamespaceScopes = namespaceScopes;
31 }
32 bool IsLiving( const NamespaceScopes &namespaceScopes ) const
33 {
34 return NamespaceScopes::IsBelong( namespaceScopes, livingNamespaceScopes );
35 }
36
37
38 // 包括しているかをチェック
39 // 例:
40 // this = "Discoversoft.ActiveBasic"
41 // living = "Discoversoft.ActiveBasic"
42 // entryName = "ActiveBasic"
43 // この場合、living は entryName を包括している。
44 bool IsCoverd( const NamespaceScopes &namespaceScopes, const string &entryName ) const
45 {
46 if( namespaceScopes.IsEqual( entryName ) ){
47 return true;
48 }
49
50 string thisStr = namespaceScopes.ToString();
51
52 NamespaceScopes tempLivingNamespaceScopes = livingNamespaceScopes;
53
54 while( tempLivingNamespaceScopes.size() ){
55 NamespaceScopes tempNamespaceScopes = tempLivingNamespaceScopes;
56
57 string tempStr = tempNamespaceScopes.ToString() + "." + entryName;
58 if( thisStr == tempStr ){
59 return true;
60 }
61
62 tempLivingNamespaceScopes.pop_back();
63 }
64 return false;
65 }
66 bool IsCoverd( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ) const
67 {
68 return IsCoverd( baseNamespaceScopes, entryNamespaceScopes.ToString() );
69 }
70
71
72 // 指定された名前空間が同一エリアと見なされるかどうかをチェック
73 bool IsSameAreaNamespace( const NamespaceScopes &baseNamespaceScopes, const NamespaceScopes &entryNamespaceScopes ){
74 if( entryNamespaceScopes.size() ){
75 if( IsCoverd( baseNamespaceScopes, entryNamespaceScopes ) ){
76 // 包括しているときは同一と見なす
77 return true;
78 }
79 }
80 else{
81 if( baseNamespaceScopes.size() ){
82 // 名前空間の判断が必要なとき
83 if( this->importedNamespaces.IsImported( baseNamespaceScopes )
84 || IsLiving( baseNamespaceScopes ) ){
85 // Using指定があるとき
86 // または
87 // 指定された名前空間が現在の名前空間スコープと同一のとき
88 return true;
89 }
90 }
91 else{
92 return true;
93 }
94 }
95
96 return false;
97 }
98
99 static bool CollectNamespaces( const char *source, NamespaceScopesCollection &namespaceScopesCollection );
100};
Note: See TracBrowser for help on using the repository browser.