source: dev/branches/egtra/ab5.0/abdev/ab_common/include/Lexical/Symbol.h@ 810

Last change on this file since 810 was 810, checked in by イグトランス (egtra), 13 years ago

ムーブコンストラクタ・ムーブ代入演算子の導入

File size: 2.2 KB
RevLine 
[206]1#pragma once
2
[509]3namespace ActiveBasic{ namespace Common{ namespace Lexical{
[206]4
[603]5std::string Operator_NaturalStringToCalcMarkString( const std::string &name );
6std::string Operator_CalcMarkStringToNaturalString( const std::string &name );
[215]7
[206]8class Symbol
9{
[504]10 static const NamespaceSupporter *namespaceSupporter;
11
[206]12 NamespaceScopes namespaceScopes;
[509]13 std::string name;
[206]14
15 // XMLシリアライズ用
16private:
17 friend class boost::serialization::access;
[208]18 BOOST_SERIALIZATION_SPLIT_MEMBER();
19 template<class Archive> void load(Archive& ar, const unsigned int version)
[206]20 {
[210]21 //trace_for_serialize( "serializing(load) - Symbol" );
[208]22
[206]23 ar & BOOST_SERIALIZATION_NVP( namespaceScopes );
[208]24
25 std::string _name;
26 ar & BOOST_SERIALIZATION_NVP( _name );
27 this->name = Operator_NaturalStringToCalcMarkString( _name );
[206]28 }
[208]29 template<class Archive> void save(Archive& ar, const unsigned int version) const
30 {
[210]31 //trace_for_serialize( "serializing(save) - Symbol" );
[206]32
[208]33 ar & BOOST_SERIALIZATION_NVP( namespaceScopes );
34
35 std::string _name = Operator_CalcMarkStringToNaturalString( name );
36 ar & BOOST_SERIALIZATION_NVP( _name );
37 }
38
[206]39public:
[509]40 Symbol( const NamespaceScopes &namespaceScopes, const std::string &name )
[206]41 : namespaceScopes( namespaceScopes )
42 , name( name )
43 {
44 }
45 Symbol( const Symbol &symbol )
46 : namespaceScopes( symbol.namespaceScopes )
47 , name( symbol.name )
48 {
49 }
[810]50 Symbol(Symbol&& symbol)
51 : namespaceScopes(std::move(symbol.namespaceScopes))
52 , name(std::move(symbol.name))
53 {
54 }
[206]55 Symbol()
56 {
57 }
[810]58 Symbol& operator =(Symbol&& symbol)
59 {
60 namespaceScopes = std::move(symbol.namespaceScopes);
61 name = std::move(symbol.name);
62 return *this;
63 }
64 Symbol& operator =(Symbol const& symbol)
65 {
66 return *this = Symbol(symbol);
67 }
[206]68
[504]69 static void RegistNamespaceSupporter( const NamespaceSupporter *namespaceSupporter )
70 {
71 Symbol::namespaceSupporter = namespaceSupporter;
72 }
73
[208]74 virtual const NamespaceScopes &GetNamespaceScopes() const
[206]75 {
76 return namespaceScopes;
77 }
[509]78 const std::string &GetName() const
[206]79 {
80 return name;
81 }
[348]82 std::string GetFullName() const;
[206]83
84 // シンボル比較
[509]85 bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const std::string &name ) const;
[206]86 bool IsEqualSymbol( const Symbol &symbol ) const;
87};
[509]88
89
90}}}
Note: See TracBrowser for help on using the repository browser.