summaryrefslogtreecommitdiffstats
path: root/c++/src/H5IdComponent.h
diff options
context:
space:
mode:
Diffstat (limited to 'c++/src/H5IdComponent.h')
-rw-r--r--c++/src/H5IdComponent.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/c++/src/H5IdComponent.h b/c++/src/H5IdComponent.h
new file mode 100644
index 0000000..0ac9996
--- /dev/null
+++ b/c++/src/H5IdComponent.h
@@ -0,0 +1,95 @@
+#ifndef _IdComponent_H
+#define _IdComponent_H
+
+// IdComponent provides a mechanism to handle
+// reference counting for an identifier of any HDF5 object.
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class IdComponent {
+ public:
+ // Parent classes must reset the current IdComponent copy
+ // before setting new id to control reference count
+ void setId( hid_t new_id );
+
+ // Pure virtual function so appropriate close function can
+ // be called by subclasses' for the corresponding object
+ virtual void p_close() const = 0;
+
+ // Creates an object to hold an HDF5 identifier
+ IdComponent( hid_t h5_id );
+
+ // Copy constructor: makes copy of the original IdComponent object.
+ IdComponent( const IdComponent& original );
+
+ // Gets the value of IdComponent's data member
+ hid_t getId () const;
+
+ // Increment reference counter
+ void incRefCount();
+
+ // Decrement reference counter
+ void decRefCount();
+
+ // Get the reference counter to this identifier
+ int getCounter();
+
+ // Decrements the reference counter then determines if there are no more
+ // reference to this object
+ bool noReference();
+
+ // Resets this IdComponent instance
+ //template <class Type>
+ //void reset( Type* parent );
+ void reset();
+ void resetId();
+
+ // Destructor
+ virtual ~IdComponent();
+
+ protected:
+ hid_t id; // HDF5 object id
+ RefCounter* ref_count; // used to keep track of the
+ // number of copies of an object
+
+ // Assignment operator
+ IdComponent& operator=( const IdComponent& rhs );
+
+ // Default constructor
+ IdComponent();
+
+}; // end class IdComponent
+
+// BMR - including template member function implementation here to
+// prevent compilation errors. When the compilers support template
+// member functions in *.C files, move them to IdComponent.C.
+
+// This function makes sure that this IdComponent instance actually
+// represents an HDF5 component and that this HDF5 component is no longer
+// referenced, then calls the parent function p_close to close the
+// appropriate HDF5 component. In addition, this identifier instance
+// will delete itself.
+// Type is the class of the instance to whom this IdComponent object
+// belongs.
+/* 11/10/00 - BMR: commented this member function because many compilers
+ still have no support for member template function. The function is
+ replaced by resetIdComponent in H5Idtemplates.h
+template <class Type>
+void IdComponent::reset( Type* parent )
+{
+ if( ref_count->noReference()) // ref_count is decremented here
+ {
+ if( id > 0 )
+ parent->p_close(); // which p_close depends on whom this
+ // IdComponent object belongs to
+ delete ref_count; // delete the reference counter
+ delete this; // this IdComponent object deletes itself
+ }
+}
+*/
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif