mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-16 10:08:36 +03:00
0024023: Revamp the OCCT Handle -- plugin
Definition of PLUGINFACTORY function changed to return Standard_Transient* instead of Handle(Standard_Transient), which cannot be returned by C-style function. Default implementation of PLUGINFACTORY() instantiated by macro PLUGIN() is corrected accordingly. Methods Factory() in persistence packages are made returning const & to handle; this is to reflect the fact that returned handle should point to existing object (usually statically allocated) rather than new one.
This commit is contained in:
parent
83eaf3e892
commit
ce8b059af3
@ -33,6 +33,7 @@ is
|
|||||||
class DocumentRetrievalDriver;
|
class DocumentRetrievalDriver;
|
||||||
|
|
||||||
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
||||||
|
---C++: return const &
|
||||||
|
|
||||||
AttributeDrivers (MsgDrv : MessageDriver from CDM)
|
AttributeDrivers (MsgDrv : MessageDriver from CDM)
|
||||||
returns ADriverTable from BinMDF;
|
returns ADriverTable from BinMDF;
|
||||||
|
@ -34,7 +34,7 @@ static Standard_GUID BinRetrievalDriver("03a56836-8269-11d5-aab2-0050044b1af1");
|
|||||||
//function : Factory
|
//function : Factory
|
||||||
//purpose : PLUGIN FACTORY
|
//purpose : PLUGIN FACTORY
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Handle(Standard_Transient) BinDrivers::Factory(const Standard_GUID& theGUID)
|
const Handle(Standard_Transient)& BinDrivers::Factory(const Standard_GUID& theGUID)
|
||||||
{
|
{
|
||||||
if (theGUID == BinStorageDriver)
|
if (theGUID == BinStorageDriver)
|
||||||
{
|
{
|
||||||
@ -57,7 +57,8 @@ Handle(Standard_Transient) BinDrivers::Factory(const Standard_GUID& theGUID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Standard_Failure::Raise ("BinDrivers : unknown GUID");
|
Standard_Failure::Raise ("BinDrivers : unknown GUID");
|
||||||
return NULL;
|
static Handle(Standard_Transient) aNullHandle;
|
||||||
|
return aNullHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -90,7 +91,4 @@ TCollection_AsciiString BinDrivers::StorageVersion()
|
|||||||
return BinLDrivers::StorageVersion();
|
return BinLDrivers::StorageVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
PLUGIN(BinDrivers)
|
PLUGIN(BinDrivers)
|
||||||
|
@ -35,6 +35,7 @@ is
|
|||||||
imported VectorOfDocumentSection;
|
imported VectorOfDocumentSection;
|
||||||
|
|
||||||
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
||||||
|
---C++: return const &
|
||||||
|
|
||||||
AttributeDrivers (MsgDrv : MessageDriver from CDM)
|
AttributeDrivers (MsgDrv : MessageDriver from CDM)
|
||||||
returns ADriverTable from BinMDF;
|
returns ADriverTable from BinMDF;
|
||||||
|
@ -32,7 +32,7 @@ static Standard_GUID BinLRetrievalDriver("13a56836-8269-11d5-aab2-0050044b1af1")
|
|||||||
//function : Factory
|
//function : Factory
|
||||||
//purpose : PLUGIN FACTORY
|
//purpose : PLUGIN FACTORY
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Handle(Standard_Transient) BinLDrivers::Factory(const Standard_GUID& theGUID)
|
const Handle(Standard_Transient)& BinLDrivers::Factory(const Standard_GUID& theGUID)
|
||||||
{
|
{
|
||||||
if (theGUID == BinLStorageDriver)
|
if (theGUID == BinLStorageDriver)
|
||||||
{
|
{
|
||||||
@ -55,7 +55,8 @@ Handle(Standard_Transient) BinLDrivers::Factory(const Standard_GUID& theGUID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Standard_Failure::Raise ("BinLDrivers : unknown GUID");
|
Standard_Failure::Raise ("BinLDrivers : unknown GUID");
|
||||||
return NULL;
|
static Handle(Standard_Transient) aNullHandle;
|
||||||
|
return aNullHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -89,7 +90,4 @@ TCollection_AsciiString BinLDrivers::StorageVersion()
|
|||||||
return aVersionStr;
|
return aVersionStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
PLUGIN(BinLDrivers)
|
PLUGIN(BinLDrivers)
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
static Standard_GUID BinStorageDriver ("f78ff4a2-a779-11d5-aab4-0050044b1af1");
|
static Standard_GUID BinStorageDriver ("f78ff4a2-a779-11d5-aab4-0050044b1af1");
|
||||||
static Standard_GUID BinRetrievalDriver("f78ff4a3-a779-11d5-aab4-0050044b1af1");
|
static Standard_GUID BinRetrievalDriver("f78ff4a3-a779-11d5-aab4-0050044b1af1");
|
||||||
|
|
||||||
Handle(Standard_Transient) BinTObjDrivers::Factory(const Standard_GUID& aGUID)
|
const Handle(Standard_Transient)& BinTObjDrivers::Factory(const Standard_GUID& aGUID)
|
||||||
{
|
{
|
||||||
if(aGUID == BinStorageDriver)
|
if(aGUID == BinStorageDriver)
|
||||||
{
|
{
|
||||||
@ -69,7 +69,4 @@ void BinTObjDrivers::AddDrivers (const Handle(BinMDF_ADriverTable)& aDriverTable
|
|||||||
aDriverTable -> AddDriver (new BinTObjDrivers_IntSparseArrayDriver (aMsgDrv));
|
aDriverTable -> AddDriver (new BinTObjDrivers_IntSparseArrayDriver (aMsgDrv));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
PLUGIN(BinTObjDrivers)
|
PLUGIN(BinTObjDrivers)
|
||||||
|
@ -30,7 +30,7 @@ class BinTObjDrivers
|
|||||||
public:
|
public:
|
||||||
// ---------- PUBLIC METHODS ----------
|
// ---------- PUBLIC METHODS ----------
|
||||||
|
|
||||||
Standard_EXPORT static Handle(Standard_Transient) Factory
|
Standard_EXPORT static const Handle(Standard_Transient)& Factory
|
||||||
(const Standard_GUID& aGUID);
|
(const Standard_GUID& aGUID);
|
||||||
// Returns a driver corresponding to <aGUID>. Used for plugin.
|
// Returns a driver corresponding to <aGUID>. Used for plugin.
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ is
|
|||||||
class DocumentRetrievalDriver;
|
class DocumentRetrievalDriver;
|
||||||
|
|
||||||
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
||||||
|
---C++: return const &
|
||||||
|
|
||||||
AttributeDrivers (MsgDrv : MessageDriver from CDM)
|
AttributeDrivers (MsgDrv : MessageDriver from CDM)
|
||||||
returns ADriverTable from BinMDF;
|
returns ADriverTable from BinMDF;
|
||||||
|
@ -29,7 +29,7 @@ static Standard_GUID BinXCAFRetrievalDriver("a78ff497-a779-11d5-aab4-0050044b1af
|
|||||||
//function :
|
//function :
|
||||||
//purpose :
|
//purpose :
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Handle(Standard_Transient) BinXCAFDrivers::Factory(const Standard_GUID& theGUID) {
|
const Handle(Standard_Transient)& BinXCAFDrivers::Factory(const Standard_GUID& theGUID) {
|
||||||
|
|
||||||
if (theGUID == BinXCAFStorageDriver)
|
if (theGUID == BinXCAFStorageDriver)
|
||||||
{
|
{
|
||||||
@ -53,7 +53,8 @@ Handle(Standard_Transient) BinXCAFDrivers::Factory(const Standard_GUID& theGUID)
|
|||||||
|
|
||||||
|
|
||||||
Standard_Failure::Raise ("XCAFBinDrivers : unknown GUID");
|
Standard_Failure::Raise ("XCAFBinDrivers : unknown GUID");
|
||||||
return NULL;
|
static Handle(Standard_Transient) aNullHandle;
|
||||||
|
return aNullHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -70,7 +71,4 @@ Handle(BinMDF_ADriverTable) BinXCAFDrivers::AttributeDrivers(const Handle(CDM_Me
|
|||||||
return aTable;
|
return aTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
PLUGIN(BinXCAFDrivers)
|
PLUGIN(BinXCAFDrivers)
|
||||||
|
@ -26,4 +26,6 @@ is
|
|||||||
Factory(aGUID: GUID from Standard)
|
Factory(aGUID: GUID from Standard)
|
||||||
returns Transient from Standard;
|
returns Transient from Standard;
|
||||||
---Purpose: returns a DriverFactory.
|
---Purpose: returns a DriverFactory.
|
||||||
|
---C++: return const&
|
||||||
|
|
||||||
end FWOSDriver;
|
end FWOSDriver;
|
||||||
|
@ -19,13 +19,9 @@
|
|||||||
|
|
||||||
#include <Plugin_Macro.hxx>
|
#include <Plugin_Macro.hxx>
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PLUGIN(FWOSDriver)
|
PLUGIN(FWOSDriver)
|
||||||
|
|
||||||
Handle(Standard_Transient) FWOSDriver::Factory(const Standard_GUID& /*aGUID*/) {
|
const Handle(Standard_Transient)& FWOSDriver::Factory(const Standard_GUID& /*aGUID*/) {
|
||||||
static Handle(FWOSDriver_DriverFactory) f;
|
static Handle(FWOSDriver_DriverFactory) f;
|
||||||
if(f.IsNull()) f = new FWOSDriver_DriverFactory;
|
if(f.IsNull()) f = new FWOSDriver_DriverFactory;
|
||||||
return f;
|
return f;
|
||||||
|
@ -94,8 +94,8 @@ Handle(Standard_Transient) Plugin::Load (const Standard_GUID& aGUID,
|
|||||||
else
|
else
|
||||||
f = theMapOfFunctions(pid);
|
f = theMapOfFunctions(pid);
|
||||||
|
|
||||||
Handle(Standard_Transient) (*fp) (const Standard_GUID&) = NULL;
|
Standard_Transient* (*fp) (const Standard_GUID&) = NULL;
|
||||||
fp = (Handle(Standard_Transient) (*)(const Standard_GUID&)) f;
|
fp = (Standard_Transient* (*)(const Standard_GUID&)) f;
|
||||||
Handle(Standard_Transient) theServiceFactory = (*fp) (aGUID);
|
Handle(Standard_Transient) theServiceFactory = (*fp) (aGUID);
|
||||||
return theServiceFactory;
|
return theServiceFactory;
|
||||||
|
|
||||||
|
@ -17,11 +17,11 @@
|
|||||||
#ifndef _Plugin_Macro_HeaderFile
|
#ifndef _Plugin_Macro_HeaderFile
|
||||||
#define _Plugin_Macro_HeaderFile
|
#define _Plugin_Macro_HeaderFile
|
||||||
|
|
||||||
|
//! Macro implementing C-style interface function to get factory object from the dynamically loaded library
|
||||||
#define PLUGIN(name) \
|
#define PLUGIN(name) \
|
||||||
extern "C" {Standard_EXPORT Handle(Standard_Transient) PLUGINFACTORY(const Standard_GUID&);} \
|
extern "C" Standard_EXPORT Standard_Transient* PLUGINFACTORY(const Standard_GUID& aGUID) { \
|
||||||
Handle(Standard_Transient) PLUGINFACTORY(const Standard_GUID& aGUID) { \
|
return const_cast<Standard_Transient*>(name::Factory(aGUID).get()); \
|
||||||
return name::Factory(aGUID);}\
|
}
|
||||||
\
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -32,6 +32,7 @@ is
|
|||||||
class DocumentRetrievalDriver;
|
class DocumentRetrievalDriver;
|
||||||
|
|
||||||
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
||||||
|
---C++: return const &
|
||||||
|
|
||||||
AttributeDrivers (theMsgDriver: MessageDriver from CDM)
|
AttributeDrivers (theMsgDriver: MessageDriver from CDM)
|
||||||
returns ADriverTable from XmlMDF;
|
returns ADriverTable from XmlMDF;
|
||||||
|
@ -40,7 +40,7 @@ static Standard_GUID XmlRetrievalDriver("03a56822-8269-11d5-aab2-0050044b1af1");
|
|||||||
//function : Factory
|
//function : Factory
|
||||||
//purpose : PLUGIN FACTORY
|
//purpose : PLUGIN FACTORY
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Handle(Standard_Transient) XmlDrivers::Factory(const Standard_GUID& theGUID)
|
const Handle(Standard_Transient)& XmlDrivers::Factory(const Standard_GUID& theGUID)
|
||||||
{
|
{
|
||||||
if (theGUID == XmlStorageDriver)
|
if (theGUID == XmlStorageDriver)
|
||||||
{
|
{
|
||||||
@ -64,7 +64,8 @@ Handle(Standard_Transient) XmlDrivers::Factory(const Standard_GUID& theGUID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Standard_Failure::Raise ("XmlDrivers : unknown GUID");
|
Standard_Failure::Raise ("XmlDrivers : unknown GUID");
|
||||||
return NULL;
|
static Handle(Standard_Transient) aNullHandle;
|
||||||
|
return aNullHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -87,9 +88,5 @@ Handle(XmlMDF_ADriverTable) XmlDrivers::AttributeDrivers
|
|||||||
return aTable;
|
return aTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Declare entry point PLUGINFACTORY
|
// Declare entry point PLUGINFACTORY
|
||||||
PLUGIN(XmlDrivers)
|
PLUGIN(XmlDrivers)
|
||||||
|
@ -35,6 +35,7 @@ is
|
|||||||
imported SequenceOfNamespaceDef;
|
imported SequenceOfNamespaceDef;
|
||||||
|
|
||||||
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
Factory (theGUID : GUID from Standard) returns Transient from Standard;
|
||||||
|
---C++: return const &
|
||||||
|
|
||||||
CreationDate returns AsciiString from TCollection;
|
CreationDate returns AsciiString from TCollection;
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ static Standard_GUID XmlLRetrievalDriver("13a56822-8269-11d5-aab2-0050044b1af1")
|
|||||||
//function : Factory
|
//function : Factory
|
||||||
//purpose : PLUGIN FACTORY
|
//purpose : PLUGIN FACTORY
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
Handle(Standard_Transient) XmlLDrivers::Factory(const Standard_GUID& theGUID)
|
const Handle(Standard_Transient)& XmlLDrivers::Factory(const Standard_GUID& theGUID)
|
||||||
{
|
{
|
||||||
if (theGUID == XmlLStorageDriver)
|
if (theGUID == XmlLStorageDriver)
|
||||||
{
|
{
|
||||||
@ -60,7 +60,8 @@ Handle(Standard_Transient) XmlLDrivers::Factory(const Standard_GUID& theGUID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Standard_Failure::Raise ("XmlLDrivers : unknown GUID");
|
Standard_Failure::Raise ("XmlLDrivers : unknown GUID");
|
||||||
return NULL;
|
static Handle(Standard_Transient) aNullHandle;
|
||||||
|
return aNullHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SLENGTH 80
|
#define SLENGTH 80
|
||||||
@ -121,9 +122,5 @@ TCollection_AsciiString XmlLDrivers::StorageVersion()
|
|||||||
return aVersionStr;
|
return aVersionStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Declare entry point PLUGINFACTORY
|
// Declare entry point PLUGINFACTORY
|
||||||
PLUGIN(XmlLDrivers)
|
PLUGIN(XmlLDrivers)
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
static Standard_GUID XmlStorageDriver ("f78ff4a0-a779-11d5-aab4-0050044b1af1");
|
static Standard_GUID XmlStorageDriver ("f78ff4a0-a779-11d5-aab4-0050044b1af1");
|
||||||
static Standard_GUID XmlRetrievalDriver("f78ff4a1-a779-11d5-aab4-0050044b1af1");
|
static Standard_GUID XmlRetrievalDriver("f78ff4a1-a779-11d5-aab4-0050044b1af1");
|
||||||
|
|
||||||
Handle(Standard_Transient) XmlTObjDrivers::Factory(const Standard_GUID& aGUID)
|
const Handle(Standard_Transient)& XmlTObjDrivers::Factory(const Standard_GUID& aGUID)
|
||||||
{
|
{
|
||||||
if(aGUID == XmlStorageDriver)
|
if(aGUID == XmlStorageDriver)
|
||||||
{
|
{
|
||||||
@ -71,8 +71,4 @@ void XmlTObjDrivers::AddDrivers (const Handle(XmlMDF_ADriverTable)& aDriverTable
|
|||||||
aDriverTable -> AddDriver (new XmlTObjDrivers_IntSparseArrayDriver(anMsgDrv));
|
aDriverTable -> AddDriver (new XmlTObjDrivers_IntSparseArrayDriver(anMsgDrv));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PLUGIN(XmlTObjDrivers)
|
PLUGIN(XmlTObjDrivers)
|
||||||
|
@ -30,7 +30,7 @@ class XmlTObjDrivers
|
|||||||
public:
|
public:
|
||||||
// ---------- PUBLIC METHODS ----------
|
// ---------- PUBLIC METHODS ----------
|
||||||
|
|
||||||
Standard_EXPORT static Handle(Standard_Transient) Factory
|
Standard_EXPORT static const Handle(Standard_Transient)& Factory
|
||||||
(const Standard_GUID& aGUID);
|
(const Standard_GUID& aGUID);
|
||||||
// Returns a driver corresponding to <aGUID>. Used for plugin.
|
// Returns a driver corresponding to <aGUID>. Used for plugin.
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ is
|
|||||||
|
|
||||||
Factory (aGUID: GUID from Standard)
|
Factory (aGUID: GUID from Standard)
|
||||||
returns Transient from Standard;
|
returns Transient from Standard;
|
||||||
|
---C++: return const &
|
||||||
---Purpose: Depending from the ID, returns a list of storage
|
---Purpose: Depending from the ID, returns a list of storage
|
||||||
-- or retrieval attribute drivers. Used for plugin.
|
-- or retrieval attribute drivers. Used for plugin.
|
||||||
--
|
--
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
static Standard_GUID XSStorageDriver ("f78ff496-a779-11d5-aab4-0050044b1af1");
|
static Standard_GUID XSStorageDriver ("f78ff496-a779-11d5-aab4-0050044b1af1");
|
||||||
static Standard_GUID XSRetrievalDriver("f78ff497-a779-11d5-aab4-0050044b1af1");
|
static Standard_GUID XSRetrievalDriver("f78ff497-a779-11d5-aab4-0050044b1af1");
|
||||||
|
|
||||||
Handle(Standard_Transient) XmlXCAFDrivers::Factory(const Standard_GUID& aGUID)
|
const Handle(Standard_Transient)& XmlXCAFDrivers::Factory(const Standard_GUID& aGUID)
|
||||||
{
|
{
|
||||||
if(aGUID == XSStorageDriver)
|
if(aGUID == XSStorageDriver)
|
||||||
{
|
{
|
||||||
@ -50,7 +50,4 @@ Handle(Standard_Transient) XmlXCAFDrivers::Factory(const Standard_GUID& aGUID)
|
|||||||
return XmlDrivers::Factory (aGUID);
|
return XmlDrivers::Factory (aGUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
|
||||||
#pragma warning(disable:4190) /* disable warning on C++ type returned by C function; should be OK for C++ usage */
|
|
||||||
#endif
|
|
||||||
PLUGIN(XmlXCAFDrivers)
|
PLUGIN(XmlXCAFDrivers)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user