retdec
|
A base class of all objects a module can contain. More...
#include <value.h>
Public Member Functions | |
virtual | ~Value ()=default |
virtual ShPtr< Value > | getSelf () override |
Returns a shared pointer of self. More... | |
virtual ShPtr< Value > | clone ()=0 |
Returns a clone of the value. More... | |
virtual bool | isEqualTo (ShPtr< Value > otherValue) const =0 |
Returns true if this value is equal to otherValue, false otherwise. More... | |
std::string | getTextRepr () |
Returns a textual representation of the value. More... | |
![]() | |
virtual void | accept (Visitor *v)=0 |
Visitor pattern implementation. More... | |
![]() | |
void | setMetadata (std::string data) |
Attaches new metadata. More... | |
std::string | getMetadata () const |
Returns the attached metadata. More... | |
bool | hasMetadata () const |
Are there any non-empty metadata? More... | |
![]() | |
Observer ()=default | |
Creates a new observer. More... | |
virtual | ~Observer ()=default |
Destructs the observer. More... | |
virtual void | update (ShPtr< Value > subject, ShPtr< Value > arg=nullptr) |
Subject has changed its state. More... | |
![]() | |
Subject () | |
Creates a new subject. More... | |
virtual | ~Subject ()=default |
Destructs the subject. More... | |
void | addObserver (ObserverPtr observer) |
Adds a new observer to the list of observers. More... | |
void | removeObserver (ObserverPtr observer) |
Removes the selected observer from the list of observers. More... | |
void | removeObservers () |
Removes all observers. More... | |
void | notifyObservers (ShPtr< Value > arg=nullptr) |
Notifies all observers by calling Observer::update() on them. More... | |
Protected Member Functions | |
Value ()=default | |
![]() | |
Visitable ()=default | |
~Visitable ()=default | |
![]() | |
Metadatable () | |
Constructs a new metadatable object. More... | |
![]() | |
observer_iterator | observer_begin () const |
Returns a constant iterator to the first observer. More... | |
observer_iterator | observer_end () const |
Returns a constant iterator past the last observer. More... | |
Additional Inherited Members | |
![]() | |
using | ConcreteObserver = Observer< Value, Value > |
A concrete observer. More... | |
using | ObserverPtr = WkPtr< ConcreteObserver > |
A pointer to an observer. More... | |
![]() | |
using | ObserverContainer = std::vector< ObserverPtr > |
A container to store observers. More... | |
using | observer_iterator = typename ObserverContainer::const_iterator |
![]() | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
NonCopyable ()=default | |
~NonCopyable ()=default | |
A base class of all objects a module can contain.
Instances of this class have reference object semantics.
|
virtualdefault |
|
protecteddefault |
Returns a clone of the value.
A clone is (in most cases) an exact copy of the value. This member function provides the copy mechanism for reference objects.
The following parts of values are not cloned:
The following subclasses of Value are not cloned, i.e. they are returned without any copying:
Statements in compound statements (i.e. statements where isCompound()
returns true
) are cloned without their successors; therefore, e.g., just the first statement of every if's clause is cloned.
Implemented in retdec::llvmir2hll::WhileLoopStmt, retdec::llvmir2hll::VoidType, retdec::llvmir2hll::Variable, retdec::llvmir2hll::VarDefStmt, retdec::llvmir2hll::UnreachableStmt, retdec::llvmir2hll::UnknownType, retdec::llvmir2hll::UForLoopStmt, retdec::llvmir2hll::TruncCastExpr, retdec::llvmir2hll::TernaryOpExpr, retdec::llvmir2hll::SwitchStmt, retdec::llvmir2hll::SubOpExpr, retdec::llvmir2hll::StructType, retdec::llvmir2hll::StructIndexOpExpr, retdec::llvmir2hll::StringType, retdec::llvmir2hll::ReturnStmt, retdec::llvmir2hll::PtrToIntCastExpr, retdec::llvmir2hll::PointerType, retdec::llvmir2hll::OrOpExpr, retdec::llvmir2hll::NotOpExpr, retdec::llvmir2hll::NeqOpExpr, retdec::llvmir2hll::NegOpExpr, retdec::llvmir2hll::MulOpExpr, retdec::llvmir2hll::ModOpExpr, retdec::llvmir2hll::LtOpExpr, retdec::llvmir2hll::LtEqOpExpr, retdec::llvmir2hll::IntType, retdec::llvmir2hll::IntToPtrCastExpr, retdec::llvmir2hll::IntToFPCastExpr, retdec::llvmir2hll::IfStmt, retdec::llvmir2hll::GtOpExpr, retdec::llvmir2hll::GtEqOpExpr, retdec::llvmir2hll::GotoStmt, retdec::llvmir2hll::GlobalVarDef, retdec::llvmir2hll::FunctionType, retdec::llvmir2hll::Function, retdec::llvmir2hll::FPToIntCastExpr, retdec::llvmir2hll::ForLoopStmt, retdec::llvmir2hll::FloatType, retdec::llvmir2hll::ExtCastExpr, retdec::llvmir2hll::EqOpExpr, retdec::llvmir2hll::EmptyStmt, retdec::llvmir2hll::DivOpExpr, retdec::llvmir2hll::DerefOpExpr, retdec::llvmir2hll::ContinueStmt, retdec::llvmir2hll::ConstSymbol, retdec::llvmir2hll::ConstStruct, retdec::llvmir2hll::ConstString, retdec::llvmir2hll::ConstNullPointer, retdec::llvmir2hll::ConstInt, retdec::llvmir2hll::ConstFloat, retdec::llvmir2hll::ConstBool, retdec::llvmir2hll::ConstArray, retdec::llvmir2hll::CommaOpExpr, retdec::llvmir2hll::CallStmt, retdec::llvmir2hll::CallExpr, retdec::llvmir2hll::BreakStmt, retdec::llvmir2hll::BitXorOpExpr, retdec::llvmir2hll::BitShrOpExpr, retdec::llvmir2hll::BitShlOpExpr, retdec::llvmir2hll::BitOrOpExpr, retdec::llvmir2hll::BitCastExpr, retdec::llvmir2hll::BitAndOpExpr, retdec::llvmir2hll::AssignStmt, retdec::llvmir2hll::AssignOpExpr, retdec::llvmir2hll::ArrayType, retdec::llvmir2hll::ArrayIndexOpExpr, retdec::llvmir2hll::AndOpExpr, retdec::llvmir2hll::AddressOpExpr, and retdec::llvmir2hll::AddOpExpr.
Returns a shared pointer of self.
Usually, if the class inherits from SharableFromThis<>, then this function can be implemented as
Notice, however, that then notifyObservers() or removeObserver() cannot be called from a constructor or destructor of the class which inherits from Subject because it is not safe to call shared_from_this() within there.
This function is used in notifyObservers() to get the pointer of self. Since shared pointers are used, the situation is a bit more difficult; indeed, one cannot return just ShPtr<SubjectType>(this)
.
Implements retdec::llvmir2hll::Subject< Value >.
std::string retdec::llvmir2hll::Value::getTextRepr | ( | ) |
Returns a textual representation of the value.
See the description of ValueTextReprVisitor::getTextRepr() for more information.
Returns true
if this value is equal to otherValue, false
otherwise.
This member function brings the support of value object semantics into reference objects, namely equality based not only on identity.
This function doesn't consider observers, metadata, etc.
Implemented in retdec::llvmir2hll::WhileLoopStmt, retdec::llvmir2hll::VoidType, retdec::llvmir2hll::Variable, retdec::llvmir2hll::VarDefStmt, retdec::llvmir2hll::UnreachableStmt, retdec::llvmir2hll::UnknownType, retdec::llvmir2hll::UForLoopStmt, retdec::llvmir2hll::TruncCastExpr, retdec::llvmir2hll::TernaryOpExpr, retdec::llvmir2hll::SwitchStmt, retdec::llvmir2hll::SubOpExpr, retdec::llvmir2hll::StructType, retdec::llvmir2hll::StructIndexOpExpr, retdec::llvmir2hll::StringType, retdec::llvmir2hll::ReturnStmt, retdec::llvmir2hll::PtrToIntCastExpr, retdec::llvmir2hll::PointerType, retdec::llvmir2hll::OrOpExpr, retdec::llvmir2hll::NotOpExpr, retdec::llvmir2hll::NeqOpExpr, retdec::llvmir2hll::NegOpExpr, retdec::llvmir2hll::MulOpExpr, retdec::llvmir2hll::ModOpExpr, retdec::llvmir2hll::LtOpExpr, retdec::llvmir2hll::LtEqOpExpr, retdec::llvmir2hll::IntType, retdec::llvmir2hll::IntToPtrCastExpr, retdec::llvmir2hll::IntToFPCastExpr, retdec::llvmir2hll::IfStmt, retdec::llvmir2hll::GtOpExpr, retdec::llvmir2hll::GtEqOpExpr, retdec::llvmir2hll::GotoStmt, retdec::llvmir2hll::GlobalVarDef, retdec::llvmir2hll::FunctionType, retdec::llvmir2hll::Function, retdec::llvmir2hll::FPToIntCastExpr, retdec::llvmir2hll::ForLoopStmt, retdec::llvmir2hll::FloatType, retdec::llvmir2hll::ExtCastExpr, retdec::llvmir2hll::EqOpExpr, retdec::llvmir2hll::EmptyStmt, retdec::llvmir2hll::DivOpExpr, retdec::llvmir2hll::DerefOpExpr, retdec::llvmir2hll::ContinueStmt, retdec::llvmir2hll::ConstSymbol, retdec::llvmir2hll::ConstStruct, retdec::llvmir2hll::ConstString, retdec::llvmir2hll::ConstNullPointer, retdec::llvmir2hll::ConstInt, retdec::llvmir2hll::ConstFloat, retdec::llvmir2hll::ConstBool, retdec::llvmir2hll::ConstArray, retdec::llvmir2hll::CommaOpExpr, retdec::llvmir2hll::CallStmt, retdec::llvmir2hll::CallExpr, retdec::llvmir2hll::BreakStmt, retdec::llvmir2hll::BitXorOpExpr, retdec::llvmir2hll::BitShrOpExpr, retdec::llvmir2hll::BitShlOpExpr, retdec::llvmir2hll::BitOrOpExpr, retdec::llvmir2hll::BitCastExpr, retdec::llvmir2hll::BitAndOpExpr, retdec::llvmir2hll::AssignStmt, retdec::llvmir2hll::AssignOpExpr, retdec::llvmir2hll::ArrayType, retdec::llvmir2hll::ArrayIndexOpExpr, retdec::llvmir2hll::AndOpExpr, retdec::llvmir2hll::AddressOpExpr, and retdec::llvmir2hll::AddOpExpr.