Changeset 9e1d485 for src/AST/Node.hpp
- Timestamp:
- May 15, 2019, 3:41:08 PM (7 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 69bafd2
- Parents:
- 264e691
- File:
-
- 1 edited
-
src/AST/Node.hpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Node.hpp
r264e691 r9e1d485 94 94 std::ostream& operator<< ( std::ostream& out, const Node* node ); 95 95 96 // Base class for the smart pointer types97 // should never really be used.98 template< typename node_t, enum Node::ref_type ref_t >96 /// Base class for the smart pointer types 97 /// should never really be used. 98 template< typename node_t, enum Node::ref_type ref_t > 99 99 class ptr_base { 100 100 public: 101 101 ptr_base() : node(nullptr) {} 102 ptr_base( node_t * n ) : node(n) { if( !node ) node->increment(ref_t); }102 ptr_base( const node_t * n ) : node(n) { if( node ) node->increment(ref_t); } 103 103 ~ptr_base() { if( node ) node->decrement(ref_t); } 104 104 105 template< enum Node::ref_type o_ref_t >105 template< enum Node::ref_type o_ref_t > 106 106 ptr_base( const ptr_base<node_t, o_ref_t> & o ) : node(o.node) { 107 if( !node ) return; 108 node->increment(ref_t); 107 if( node ) node->increment(ref_t); 109 108 } 110 109 111 template< enum Node::ref_type o_ref_t >110 template< enum Node::ref_type o_ref_t > 112 111 ptr_base( ptr_base<node_t, o_ref_t> && o ) : node(o.node) { 113 112 if( node ) node->increment(ref_t); 114 113 } 115 114 116 template< enum Node::ref_type o_ref_t >115 template< enum Node::ref_type o_ref_t > 117 116 ptr_base & operator=( const ptr_base<node_t, o_ref_t> & o ) { 118 117 assign(o.node); … … 120 119 } 121 120 122 template< enum Node::ref_type o_ref_t >121 template< enum Node::ref_type o_ref_t > 123 122 ptr_base & operator=( ptr_base<node_t, o_ref_t> && o ) { 124 if(o.node == node) return *this;125 123 assign(o.node); 126 124 return *this; … … 134 132 135 133 template<typename o_node_t> 136 const o_node_t * as() const { return dynamic_cast< o_node_t *>(node); }134 const o_node_t * as() const { return dynamic_cast<const o_node_t *>(node); } 137 135 138 136 using ptr = const node_t *; 139 137 140 138 private: 141 void assign( node_t * other ) {139 void assign( const node_t * other ) { 142 140 if( other ) other->increment(ref_t); 143 141 if( node ) node ->decrement(ref_t); … … 146 144 147 145 protected: 148 node_t * node;146 const node_t * node; 149 147 }; 150 148
Note:
See TracChangeset
for help on using the changeset viewer.