00001 #ifndef ParameterSet_ReplaceNode_h 00002 #define ParameterSet_ReplaceNode_h 00003 00004 #include "FWCore/ParameterSet/interface/Node.h" 00005 #include <iosfwd> 00006 00007 namespace edm { 00008 namespace pset { 00009 00010 class Visitor; 00011 00017 class ReplaceNode : public Node 00018 { 00019 public: 00020 ReplaceNode(const std::string & type, const std::string& name, 00021 NodePtr value, bool okToRemodify, int line=-1) 00022 : Node(name, line), type_(type), value_(value), okToRemodify_(okToRemodify) {} 00024 ReplaceNode(const ReplaceNode & n); 00025 virtual Node * clone() const { return new ReplaceNode(*this);} 00026 virtual std::string type() const {return type_;} 00029 bool okToRemodify() const {return okToRemodify_;} 00031 bool isEmbedded() const; 00032 00033 virtual void print(std::ostream& ost, PrintOptions options) const; 00034 virtual void accept(Visitor& v) const; 00035 NodePtr value() const {return value_;} 00036 void setValue(const NodePtr & n) {value_ = n;} 00038 template<class T> T* value() const { 00039 return dynamic_cast<T*>(value().get()); 00040 } 00041 00042 private: 00043 std::string type_; 00044 NodePtr value_; 00045 bool okToRemodify_; 00046 }; 00047 00048 } 00049 } 00050 00051 #endif 00052