105 lines
2.2 KiB
C++
105 lines
2.2 KiB
C++
// Copyright (C), 1998-2007, Beijing Tangent Engineering Software Co. Ltd.
|
|
// = FileName: TDbObjectPointer.h
|
|
// = Version: 8.5
|
|
// = Author: lgh
|
|
// = Date: 2010-11-5 16:58:09
|
|
// = Description: ARX自带smart指针平台之间有差异,在此左一层封装。
|
|
// = Maintainers:
|
|
#pragma once
|
|
|
|
#include "commonRoad.h"
|
|
#include <dbObjptr.h>
|
|
|
|
template <class TDbObject>
|
|
class TDbObjectPointer
|
|
{
|
|
public:
|
|
TDbObjectPointer(void);
|
|
~TDbObjectPointer(void);
|
|
|
|
const TDbObject *object() const;
|
|
TDbObject *object();
|
|
const TDbObject * operator->() const;
|
|
TDbObject * operator->();
|
|
Acad::ErrorStatus open(AcDbObjectId objId, AcDb::OpenMode mode, bool openErased = false);
|
|
void close();
|
|
private:
|
|
AcDbObjectPointer<TDbObject> *m_pointerImp;
|
|
};
|
|
|
|
|
|
template <class TDbObject>
|
|
TDbObjectPointer<TDbObject>::TDbObjectPointer(void)
|
|
: m_pointerImp(NULL)
|
|
{
|
|
|
|
}
|
|
|
|
template <class TDbObject>
|
|
TDbObjectPointer<TDbObject>::~TDbObjectPointer(void)
|
|
{
|
|
delete m_pointerImp;
|
|
m_pointerImp = NULL;
|
|
}
|
|
|
|
|
|
|
|
template<class TDbObject> inline const TDbObject *
|
|
TDbObjectPointer<TDbObject>::object() const
|
|
{
|
|
ASSERT(m_pointerImp != NULL);
|
|
ASSERT(m_pointerImp->openStatus() == Acad::eOk);
|
|
|
|
return (*m_pointerImp).object();
|
|
}
|
|
|
|
template<class TDbObject> inline TDbObject *
|
|
TDbObjectPointer<TDbObject>::object()
|
|
{
|
|
ASSERT(m_pointerImp != NULL);
|
|
ASSERT(m_pointerImp->openStatus() == Acad::eOk);
|
|
|
|
return (*m_pointerImp).object();
|
|
}
|
|
|
|
template<class TDbObject> inline const TDbObject *
|
|
TDbObjectPointer<TDbObject>::operator->() const
|
|
{
|
|
return object();
|
|
}
|
|
|
|
template<class TDbObject> inline TDbObject *
|
|
TDbObjectPointer<TDbObject>::operator->()
|
|
{
|
|
return object();
|
|
}
|
|
|
|
|
|
template <class TDbObject>
|
|
Acad::ErrorStatus TDbObjectPointer<TDbObject>::open(AcDbObjectId objId, AcDb::OpenMode mode, bool openErased)
|
|
{
|
|
ASSERT(m_pointerImp == NULL);
|
|
|
|
m_pointerImp = new AcDbObjectPointer<TDbObject>(objId, mode, openErased);
|
|
|
|
Acad::ErrorStatus eRet = m_pointerImp->openStatus();
|
|
if (m_pointerImp->openStatus() != Acad::eOk)
|
|
{
|
|
delete m_pointerImp;
|
|
m_pointerImp = NULL;
|
|
}
|
|
|
|
return eRet;
|
|
}
|
|
|
|
template <class TDbObject>
|
|
void TDbObjectPointer<TDbObject>::close()
|
|
{
|
|
if (m_pointerImp != NULL)
|
|
{
|
|
delete m_pointerImp;
|
|
m_pointerImp = NULL;
|
|
}
|
|
}
|
|
|
|
#define AcDbObjectPointer TDbObjectPointer |