//! match) and Same State (that is, IsEqual is not required)
//! Once added, stores its attached Protocol in correspondance
Standard_EXPORT void Add (const Handle(IGESData_SpecificModule)& amodule, const Handle(IGESData_Protocol)& aprotocol);
-
+
+ //! Removes a Module from the list
+ Standard_EXPORT void Remove(const Handle(IGESData_SpecificModule)& amodule);
+
//! Returns the Module stored in a given GlobalNode
Standard_EXPORT const Handle(IGESData_SpecificModule)& Module() const;
//! match) and Same State (that is, IsEqual is not required)
//! Once added, stores its attached Protocol in correspondance
Standard_EXPORT void Add (const Handle(IGESData_ReadWriteModule)& amodule, const Handle(IGESData_Protocol)& aprotocol);
-
+
+ //! Removes a Module from the list
+ Standard_EXPORT void Remove(const Handle(IGESData_ReadWriteModule)& amodule);
+
//! Returns the Module stored in a given GlobalNode
Standard_EXPORT const Handle(IGESData_ReadWriteModule)& Module() const;
//! Adds a couple (Module-Protocol) into the global definition set
//! for this class of Library.
Standard_EXPORT static void SetGlobal (const Handle(IGESData_SpecificModule)& amodule, const Handle(IGESData_Protocol)& aprotocol);
-
+
+ //! Releases a module from the global definition set.
+ Standard_EXPORT static void ReleaseGlobal(const Handle(IGESData_SpecificModule)& amodule);
+
//! Creates a Library which complies with a Protocol, that is :
//! Same class (criterium IsInstance)
//! This creation gets the Modules from the global set, those
//! Adds a couple (Module-Protocol) into the global definition set
//! for this class of Library.
Standard_EXPORT static void SetGlobal (const Handle(IGESData_ReadWriteModule)& amodule, const Handle(IGESData_Protocol)& aprotocol);
-
+
+ //! Releases a module from the global definition set.
+ Standard_EXPORT static void ReleaseGlobal(const Handle(IGESData_ReadWriteModule)& amodule);
+
//! Creates a Library which complies with a Protocol, that is :
//! Same class (criterium IsInstance)
//! This creation gets the Modules from the global set, those
//! Adds a couple (Module-Protocol) into the global definition set
//! for this class of Library.
Standard_EXPORT static void SetGlobal (const Handle(Interface_GeneralModule)& amodule, const Handle(Interface_Protocol)& aprotocol);
-
+
+ //! Releases a module from the global definition set.
+ Standard_EXPORT static void ReleaseGlobal(const Handle(Interface_GeneralModule)& amodule);
+
//! Creates a Library which complies with a Protocol, that is :
//! Same class (criterium IsInstance)
//! This creation gets the Modules from the global set, those
//! match) and Same State (that is, IsEqual is not required)
//! Once added, stores its attached Protocol in correspondance
Standard_EXPORT void Add (const Handle(Interface_GeneralModule)& amodule, const Handle(Interface_Protocol)& aprotocol);
-
+
+ //! Removes a Module from the list
+ Standard_EXPORT void Remove(const Handle(Interface_GeneralModule)& amodule);
+
//! Returns the Module stored in a given GlobalNode
Standard_EXPORT const Handle(Interface_GeneralModule)& Module() const;
//! match) and Same State (that is, IsEqual is not required)
//! Once added, stores its attached Protocol in correspondance
Standard_EXPORT void Add (const Handle(Interface_ReaderModule)& amodule, const Handle(Interface_Protocol)& aprotocol);
-
+
+ //! Removes a Module from the list
+ Standard_EXPORT void Remove(const Handle(Interface_ReaderModule)& amodule);
+
//! Returns the Module stored in a given GlobalNode
Standard_EXPORT const Handle(Interface_ReaderModule)& Module() const;
//! Adds a couple (Module-Protocol) into the global definition set
//! for this class of Library.
Standard_EXPORT static void SetGlobal (const Handle(Interface_ReaderModule)& amodule, const Handle(Interface_Protocol)& aprotocol);
-
+
+ //! Releases a module from the global definition set.
+ Standard_EXPORT static void ReleaseGlobal(const Handle(Interface_ReaderModule)& amodule);
+
//! Creates a Library which complies with a Protocol, that is :
//! Same class (criterium IsInstance)
//! This creation gets the Modules from the global set, those
else thenext->Add (amodule,aprotocol);
}
+void LibCtl_GlobalNode::Remove(const Handle(TheModule)& amodule)
+{
+ if (themod == amodule)
+ {
+ if (thenext.IsNull())
+ {
+ themod = Handle(TheModule)();
+ theprot = Handle(TheProtocol)();
+ }
+ else
+ {
+ themod = thenext->themod;
+ theprot = thenext->theprot;
+ thenext = thenext->thenext;
+ }
+ }
+ else if (!thenext.IsNull())
+ thenext->Remove(amodule);
+}
+
const Handle(TheModule)& LibCtl_GlobalNode::Module () const
{ return themod; }
theglobal->Add(amodule,aprotocol);
}
+void LibCtl_Library::ReleaseGlobal(const Handle(TheModule)& amodule)
+{
+ if (!theglobal.IsNull())
+ theglobal->Remove(amodule);
+}
+
// Constructeur d apres Protocole
LibCtl_Library::LibCtl_Library (const Handle(TheProtocol)& aprotocol)
{
#include <StepAP214_Protocol.hxx>
#include <StepData_WriterLib.hxx>
-static int THE_RWStepAP214_init = 0;
+DEFINE_STANDARD_HANDLE(RWStepAP214_Mgr, Standard_Transient)
+
+class RWStepAP214_Mgr : public Standard_Transient
+{
+public:
+ RWStepAP214_Mgr()
+ {
+ myProtocol = StepAP214::Protocol();
+ myGeneralModule = new RWStepAP214_GeneralModule;
+ myRWModule = new RWStepAP214_ReadWriteModule;
+ Interface_GeneralLib::SetGlobal(myGeneralModule, myProtocol);
+ Interface_ReaderLib::SetGlobal(myRWModule, myProtocol);
+ StepData_WriterLib::SetGlobal(myRWModule, myProtocol);
+ }
+
+ virtual ~RWStepAP214_Mgr()
+ {
+ Interface_GeneralLib::ReleaseGlobal(myGeneralModule);
+ Interface_ReaderLib::ReleaseGlobal(myRWModule);
+ StepData_WriterLib::ReleaseGlobal(myRWModule);
+ }
+
+ DEFINE_STANDARD_RTTI_INLINE(RWStepAP214_Mgr, Standard_Transient)
+
+private:
+ Handle(StepAP214_Protocol) myProtocol;
+ Handle(RWStepAP214_ReadWriteModule) myRWModule;
+ Handle(RWStepAP214_GeneralModule) myGeneralModule;
+};
+
+static Handle(RWStepAP214_Mgr) THE_MGR;
void RWStepAP214::Init()
{
- if (THE_RWStepAP214_init)
+ if (THE_MGR.IsNull())
{
- return;
+ RWHeaderSection::Init();
+ THE_MGR = new RWStepAP214_Mgr;
}
- THE_RWStepAP214_init = 1;
- RWHeaderSection::Init();
- Handle(StepAP214_Protocol) proto = StepAP214::Protocol();
- Interface_GeneralLib::SetGlobal (new RWStepAP214_GeneralModule,proto);
- Interface_ReaderLib::SetGlobal (new RWStepAP214_ReadWriteModule,proto);
- StepData_WriterLib::SetGlobal (new RWStepAP214_ReadWriteModule,proto);
}
return Standard_True;
}
+
+Standard_Boolean STEPCAFControl_Controller::Release()
+{
+ Handle(STEPCAFControl_Controller) STEPCTL = new STEPCAFControl_Controller;
+ STEPCTL->AutoRemove();
+ return Standard_True;
+}
//! Returns True when done, False if could not be done
Standard_EXPORT static Standard_Boolean Init();
+ Standard_EXPORT static Standard_Boolean Release();
Init(WS, scratch);
}
+STEPCAFControl_Reader::~STEPCAFControl_Reader()
+{
+ STEPCAFControl_Controller::Release();
+}
//=======================================================================
//function : Init
//! Creates a reader tool and attaches it to an already existing Session
//! Clears the session if it was not yet set for STEP
Standard_EXPORT STEPCAFControl_Reader(const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
-
+
+ Standard_EXPORT virtual ~STEPCAFControl_Reader();
+
//! Clears the internal data structures and attaches to a new session
//! Clears the session if it was not yet set for STEP
Standard_EXPORT void Init (const Handle(XSControl_WorkSession)& WS, const Standard_Boolean scratch = Standard_True);
//! match) and Same State (that is, IsEqual is not required)
//! Once added, stores its attached Protocol in correspondance
Standard_EXPORT void Add (const Handle(StepData_ReadWriteModule)& amodule, const Handle(StepData_Protocol)& aprotocol);
-
+
+ //! Removes a Module from the list
+ Standard_EXPORT void Remove(const Handle(StepData_ReadWriteModule)& amodule);
+
//! Returns the Module stored in a given GlobalNode
Standard_EXPORT const Handle(StepData_ReadWriteModule)& Module() const;
//! Adds a couple (Module-Protocol) into the global definition set
//! for this class of Library.
Standard_EXPORT static void SetGlobal (const Handle(StepData_ReadWriteModule)& amodule, const Handle(StepData_Protocol)& aprotocol);
-
+
+ //! Releases a module from the global definition set.
+ Standard_EXPORT static void ReleaseGlobal(const Handle(StepData_ReadWriteModule)& amodule);
+
//! Creates a Library which complies with a Protocol, that is :
//! Same class (criterium IsInstance)
//! This creation gets the Modules from the global set, those
listad.Bind(theName, this);
}
+void XSControl_Controller::Remove(const Standard_CString theName) const
+{
+ if (listad.IsBound(theName)) {
+ listad.UnBind(theName);
+ }
+}
+
//=======================================================================
//function : Recorded
//purpose :
//! Records <me> in a general dictionary under a name
//! Error if <name> already used for another one
Standard_EXPORT void Record (const Standard_CString name) const;
-
+
+ void AutoRemove() const
+ {
+ Remove(Name(Standard_True));
+ Remove(Name(Standard_False));
+ }
+ Standard_EXPORT void Remove(const Standard_CString name) const;
+
//! Returns the Controller attached to a given name
//! Returns a Null Handle if <name> is unknown
Standard_EXPORT static Handle(XSControl_Controller) Recorded (const Standard_CString name);