& Type = nullptr);
/**
* Read the Node from input stream.
*/
Standard_EXPORT virtual VrmlData_ErrorStatus Read(VrmlData_InBuffer& theBuffer) = 0;
/**
* Write the Node to output stream.
*/
Standard_EXPORT virtual VrmlData_ErrorStatus Write(const char* thePrefix) const;
/**
* Returns True if the node is default, then it would not be written.
*/
Standard_EXPORT virtual bool IsDefault() const;
/**
* Write the closing brace in the end of a node output.
*/
Standard_EXPORT VrmlData_ErrorStatus WriteClosing() const;
/**
* Create a copy of this node.
* If the parameter is null, a new copied node is created. Otherwise new node
* is not created, but rather the given one is modified.
* This method nullifies the argument node if its member myScene differs
* from that one of the current instance.
*/
Standard_EXPORT virtual occ::handle Clone(const occ::handle&) const;
/**
* Read one boolean value (TRUE or FALSE).
*/
Standard_EXPORT static VrmlData_ErrorStatus ReadBoolean(VrmlData_InBuffer& theBuffer,
bool& theResult);
/**
* Read one quoted string, the quotes are removed.
*/
Standard_EXPORT static VrmlData_ErrorStatus ReadString(VrmlData_InBuffer& theBuffer,
TCollection_AsciiString& theRes);
/**
* Read one quoted string, the quotes are removed.
*/
Standard_EXPORT static VrmlData_ErrorStatus ReadMultiString(
VrmlData_InBuffer& theBuffer,
NCollection_List& theRes);
/**
* Read one integer value.
*/
Standard_EXPORT static VrmlData_ErrorStatus ReadInteger(VrmlData_InBuffer& theBuffer,
long& theResult);
static inline bool OK(const VrmlData_ErrorStatus theStat) { return theStat == VrmlData_StatusOK; }
static inline bool OK(VrmlData_ErrorStatus& outStat, const VrmlData_ErrorStatus theStat)
{
return (outStat = theStat) == VrmlData_StatusOK;
}
/**
* Define the common Indent in spaces, for writing all nodes.
*/
static inline int GlobalIndent() { return 2; }
protected:
// ---------- PROTECTED METHODS ----------
/**
* Constructor
*/
Standard_EXPORT VrmlData_Node(const VrmlData_Scene& theScene, const char* theName);
/**
* Read the closing brace. If successful, theBufrfer is incremented.
* If no brace is found, theBuffer stays in untouched and the method returns
* VrmlFormatError.
*/
Standard_EXPORT static VrmlData_ErrorStatus readBrace(VrmlData_InBuffer& theBuffer);
private:
// ---------- PRIVATE METHODS ----------
/**
* Method called from VrmlData_Scene when a name should be assigned
* automatically.
*/
Standard_EXPORT void setName(const char* theName, const char* theSuffix = nullptr);
private:
// ---------- PRIVATE FIELDS ----------
const VrmlData_Scene* myScene;
const char* myName; ///< name of the node
#ifdef OCCT_DEBUG
int myLineCount;
#endif
friend class VrmlData_Group;
friend class VrmlData_Scene;
public:
// Declaration of CASCADE RTTI
DEFINE_STANDARD_RTTIEXT(VrmlData_Node, Standard_Transient)
};
// Definition of HANDLE object using Standard_DefineHandle.hxx
Standard_EXPORT bool IsEqual(const occ::handle& theOne,
const occ::handle& theTwo);
namespace std
{
template <>
struct hash>
{
size_t operator()(const occ::handle& theNode) const
{
if (!theNode->Name())
{
return 1;
}
return Standard_CStringHasher{}(theNode->Name());
}
};
template <>
struct equal_to>
{
bool operator()(const occ::handle& theNode1,
const occ::handle& theNode2) const noexcept
{
return IsEqual(theNode1, theNode2);
}
};
} // namespace std
#endif