summaryrefslogtreecommitdiffstats
path: root/c++/src/H5IdComponent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c++/src/H5IdComponent.cpp')
-rw-r--r--c++/src/H5IdComponent.cpp67
1 files changed, 13 insertions, 54 deletions
diff --git a/c++/src/H5IdComponent.cpp b/c++/src/H5IdComponent.cpp
index a3c5766..f04039b 100644
--- a/c++/src/H5IdComponent.cpp
+++ b/c++/src/H5IdComponent.cpp
@@ -15,11 +15,9 @@
#include <string>
#include "H5Include.h"
-#include "H5RefCounter.h"
#include "H5Exception.h"
#include "H5Library.h"
#include "H5IdComponent.h"
-#include "H5Idtemplates.h"
#ifndef H5_NO_NAMESPACE
namespace H5 {
@@ -32,8 +30,6 @@ namespace H5 {
//--------------------------------------------------------------------------
IdComponent::IdComponent() : id( -1 )
{
- // starts counting object references
- ref_count = new RefCounter;
}
//--------------------------------------------------------------------------
@@ -46,8 +42,6 @@ IdComponent::IdComponent() : id( -1 )
IdComponent::IdComponent( const hid_t h5_id ) : id( h5_id )
{
- // starts counting object references
- ref_count = new RefCounter;
}
//--------------------------------------------------------------------------
@@ -59,8 +53,7 @@ IdComponent::IdComponent( const hid_t h5_id ) : id( h5_id )
IdComponent::IdComponent( const IdComponent& original )
{
id = original.id;
- ref_count = original.ref_count; // points to the same ref counter
- ref_count->increment(); // increment number of references to this id
+ H5Iinc_ref(id); // increment number of references to this id
}
//--------------------------------------------------------------------------
@@ -68,14 +61,19 @@ IdComponent::IdComponent( const IdComponent& original )
///\brief Increment id reference counter.
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-void IdComponent::incRefCount() { ref_count->increment(); }
+void IdComponent::incRefCount() { H5Iinc_ref(id); }
//--------------------------------------------------------------------------
// Function: IdComponent::decRefCount
///\brief Decrement id reference counter.
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-void IdComponent::decRefCount() { ref_count->decrement(); }
+void IdComponent::decRefCount()
+{
+ if(id>0)
+ if(H5Idec_ref(id)<0)
+ throw IdComponentException("IdComponent::decRefCount", "decrementing object ref count failed");
+}
//--------------------------------------------------------------------------
// Function: IdComponent::getCounter
@@ -83,22 +81,7 @@ void IdComponent::decRefCount() { ref_count->decrement(); }
///\return Reference count
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
-int IdComponent::getCounter() { return( ref_count->getCounter()); }
-
-//--------------------------------------------------------------------------
-// Function: IdComponent::noReference
-///\brief Decrements the reference counter then determines if there
-/// are no more reference to this object.
-///\return true if there are no more reference to this object, and false,
-/// otherwise
-// Programmer Binh-Minh Ribler - 2000
-//--------------------------------------------------------------------------
-bool IdComponent::noReference()
-{
- if( ref_count->getCounter() > 0 )
- ref_count->decrement();
- return( ref_count->getCounter() == 0 ? true:false );
-}
+int IdComponent::getCounter() { return( H5Iget_ref(id)); }
//--------------------------------------------------------------------------
// Function: IdComponent::operator=
@@ -116,20 +99,14 @@ bool IdComponent::noReference()
//--------------------------------------------------------------------------
IdComponent& IdComponent::operator=( const IdComponent& rhs )
{
- // reset the identifier of this object - resetIdComponent will call the
- // appropriate H5xclose to close the id
- try {
- resetIdComponent( this ); }
- catch (Exception close_error) { // thrown by p_close
- throw IdComponentException("IdComponent::operator=", close_error.getDetailMsg());
- }
+ // reset the identifier of this object, call appropriate H5Xclose
+ decRefCount();
// copy the data members from the rhs object
id = rhs.id;
- ref_count = rhs.ref_count; // points to the same ref counter
// increment the reference counter
- ref_count->increment();
+ H5Iinc_ref(id);
return( *this );
}
@@ -149,16 +126,9 @@ IdComponent& IdComponent::operator=( const IdComponent& rhs )
void IdComponent::setId( hid_t new_id )
{
// reset the identifier of this object, call appropriate H5Xclose
- try {
- resetIdComponent( this ); }
- catch (Exception close_error) { // thrown by p_close
- throw IdComponentException("IdComponent::setId", close_error.getDetailMsg());
- }
+ decRefCount();
id = new_id;
-
- // starts counting object references
- ref_count = new RefCounter;
}
//--------------------------------------------------------------------------
@@ -173,17 +143,6 @@ hid_t IdComponent::getId () const
}
//--------------------------------------------------------------------------
-// Function: IdComponent::reset
-///\brief Reset the reference counter of this object.
-// Programmer Binh-Minh Ribler - 2000
-//--------------------------------------------------------------------------
-void IdComponent::reset ()
-{
- delete ref_count;
- ref_count = NULL;
-}
-
-//--------------------------------------------------------------------------
// Function: IdComponent destructor
///\brief Noop destructor.
// Programmer Binh-Minh Ribler - 2000