[svn-r29364] Purpose: Improve C++ Packet Table library

Description:
    Performed similar improvement as the C Packet Table library.
      - Removed the VLPT_REMOVED ifdef around class VL_PacketTable
      - Moved VL_PacketTable::IsVariableLength to PacketTable
      - Moved VL_PacketTable::FreeReadBuff to PacketTable::FreeBuff
      - Added overloaded constructor to FL_PacketTable that takes a
        property list ID and call the new C API H5PTcreate.
      - Added accessor wrappers to class PacketTable, per HDFFV-8623/patch 003.
            /* Returns the ID of the dataset associated with the packet table */
            hid_t GetDataset();

            /* Returns the ID of the datatype the packet table uses */
            hid_t GetDatatype();
      - Replaced appropriate calls in tests
      - Various cleanup
Platforms tested:
    Linux/32 2.6 (jam)
    Linux/64 (platypus)
    Darwin (osx1010test)
This commit is contained in:
Binh-Minh Ribler
2016-03-09 01:47:27 -05:00
parent ab4c2402f1
commit 8222b34406
3 changed files with 159 additions and 229 deletions

View File

@@ -34,6 +34,12 @@
* Opens an existing packet table, which can contain either fixed-length or
* variable-length packets.
*/
PacketTable::PacketTable(hid_t fileID, const char* name)
{
table_id = H5PTopen( fileID, name);
}
/* "Open" Constructor - will be deprecated because of char* name */
PacketTable::PacketTable(hid_t fileID, char* name)
{
table_id = H5PTopen( fileID, name);
@@ -60,17 +66,14 @@
return false;
}
#ifdef VLPT_REMOVED
/* IsVariableLength
* Return 1 if this packet table is a Variable Length packet table,
* return 0 if it is Fixed Length. Returns -1 if the table is
* invalid (not open).
* Return 1 if this packet table uses variable-length datatype,
* and 0, otherwise. Returns -1 if the table is invalid (not open).
*/
int PacketTable::IsVariableLength()
{
return H5PTis_varlen(table_id);
}
#endif /* VLPT_REMOVED */
/* ResetIndex
* Sets the index to point to the first packet in the packet table
@@ -113,39 +116,87 @@
{
hsize_t npackets;
error = H5PTget_num_packets( table_id, (hsize_t *)&npackets);
error = H5PTget_num_packets(table_id, &npackets);
return npackets;
}
/* GetTableId
* Returns the identifier of the packet table
*/
hid_t PacketTable::GetTableId()
{
return table_id;
}
/* GetDatatype
* Returns the datatype identifier used by the packet table, on success,
* or FAIL, on failure.
* Note: it is best to avoid using this identifier in applications, unless
* the desired functionality cannot be performed via the packet table ID.
*/
hid_t PacketTable::GetDatatype()
{
return H5PTget_type(table_id);
}
/* GetDataset
* Returns the dataset identifier associated with the packet table, on
* success, or FAIL, on failure.
* Note: it is best to avoid using this identifier in applications, unless
* the desired functionality cannot be performed via the packet table ID.
*/
hid_t PacketTable::GetDataset()
{
return H5PTget_dataset(table_id);
}
/* FreeBuff
* Frees the buffers created when variable-length packets are read.
* Takes the number of hvl_t structs to be freed and a pointer to their
* location in memory.
* Returns 0 on success, negative on error.
*/
int PacketTable::FreeBuff(size_t numStructs, hvl_t * buffer)
{
return H5PTfree_vlen_buff( table_id, numStructs, buffer);
}
/********************************/
/* Fixed-Length Packet Table */
/********************************/
/* Constructor
* Creates a packet table in which to store fixed length packets.
* Creates a packet table to store either fixed- or variable-length packets.
* Takes the ID of the file the packet table will be created in, the ID of
* the property list to specify compression, the name of the packet table,
* the ID of the datatype, and the size of a memory chunk used in chunking.
*/
FL_PacketTable::FL_PacketTable(hid_t fileID, hid_t plist_id, const char* name, hid_t dtypeID, hsize_t chunkSize)
{
table_id = H5PTcreate(fileID, name, dtypeID, chunkSize, plist_id);
}
/* Constructor
* Creates a packet table to store either fixed- or variable-length packets.
* Takes the ID of the file the packet table will be created in, the name of
* the packet table, the ID of the datatype of the set, and the size
* of a memory chunk used in chunking.
* Note: this overload will be deprecated in favor of the constructor above.
*/
FL_PacketTable::FL_PacketTable(hid_t fileID, char* name, hid_t dtypeID, hsize_t chunkSize, int compression)
{
table_id = H5PTcreate_fl ( fileID, name, dtypeID, chunkSize, compression);
table_id = H5PTcreate_fl(fileID, name, dtypeID, chunkSize, compression);
}
/* "Open" Constructor
* Opens an existing fixed-length packet table.
* Fails if the packet table specified is variable-length.
*/
FL_PacketTable::FL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name)
{
#ifdef VLPT_REMOVED
if( H5PTis_varlen(table_id) != 0 ) // If this is not a fixed-length table
{
H5PTclose(table_id);
table_id = -1;
}
#endif /* VLPT_REMOVED */
}
FL_PacketTable::FL_PacketTable(hid_t fileID, const char* name) : PacketTable(fileID, name) {}
/* "Open" Constructor - will be deprecated because of char* name */
FL_PacketTable::FL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name) {}
/* AppendPacket
* Adds a single packet to the packet table. Takes a pointer
@@ -215,119 +266,4 @@
return H5PTget_next(table_id, numPackets, data);
}
#ifdef VLPT_REMOVED
/********************************/
/* Variable-Length Packet Table */
/********************************/
/* Constructor
* Creates a packet table in which to store variable length packets.
* Takes the ID of the file the packet table will be created in, the name of
* the packet table, and the size of a memory chunk used in chunking.
*/
VL_PacketTable::VL_PacketTable(hid_t fileID, char* name, hsize_t chunkSize)
{
table_id = H5PTcreate_vl ( fileID, name, chunkSize);
}
/* "Open" Constructor
* Opens an existing variable-length packet table.
* Fails if the packet table specified is fixed-length.
*/
VL_PacketTable::VL_PacketTable(hid_t fileID, char* name) : PacketTable(fileID, name)
{
if( H5PTis_varlen(table_id) != 1 ) // If this is not a variable-length table
{
H5PTclose(table_id);
table_id = -1;
}
}
/* AppendPacket (variable-length)
* Adds a single variable-length packet to the packet table.
* Takes a pointer to the location of the data in memory and the length of the data
* in bytes.
* Returns 0 on success, negative on failure.
*/
int VL_PacketTable::AppendPacket(void * data, size_t length)
{
hvl_t packet;
packet.len = length;
packet.p = data;
return H5PTappend(table_id, 1, &packet);
}
/* AppendPackets (multiple packets)
* Adds multiple variable-length packets to the packet table. Takes the
* number of
* packets to be added and a pointer to an array of hvl_t structs in memory.
* Returns 0 on success, negative on failure.
*/
int VL_PacketTable::AppendPackets(size_t numPackets, hvl_t * data)
{
return H5PTappend(table_id, numPackets, data);
}
/* GetPacket (indexed)
* Gets a single variable-length packet from the packet table. Takes the
* index of the packet (with 0 being the first packet) and a pointer
* to a hvl_t struct in which to store the packet's size and location.
* Returns 0 on success, negative on failure.
*/
int VL_PacketTable::GetPacket(hsize_t index, hvl_t * data)
{
return H5PTread_packets(table_id, index, 1, data);
}
/* GetPackets (multiple packets)
* Gets multiple variable-length packets at once, all packets between
* startIndex and endIndex inclusive. Takes a pointer to an array
* of hvl_t structs in memory in which to store pointers to the packets.
* Returns 0 on success, negative on failure.
*/
int VL_PacketTable::GetPackets(hsize_t startIndex, hsize_t endIndex, hvl_t * data)
{
// Make sure the range of indexes is valid
if (startIndex > endIndex)
return -1;
return H5PTread_packets(table_id, startIndex, endIndex-startIndex+1, data);
}
/* GetNextPacket (single packet)
* Gets the next packet in the packet table. Takes a pointer to
* an hvl_t struct where the packet should be stored.
* Returns 0 on success, negative on failure. Index
* is not advanced to the next packet on failure.
*/
int VL_PacketTable::GetNextPacket(hvl_t * data)
{
return H5PTget_next(table_id, 1, data);
}
/* GetNextPackets (multiple packets)
* Gets the next numPackets packets in the packet table. Takes a
* pointer to an array of hvl_t structs where pointers to the packets
* should be stored.
* Returns 0 on success, negative on failure. Index
* is not advanced on failure.
*/
int VL_PacketTable::GetNextPackets(size_t numPackets, hvl_t * data)
{
return H5PTget_next(table_id, numPackets, data);
}
/* FreeReadbuff
* Frees the buffers created when variable-length packets are read.
* Takes the number of hvl_t structs to be freed and a pointer to their
* location in memory.
* Returns 0 on success, negative on error.
*/
int VL_PacketTable::FreeReadbuff(size_t numStructs, hvl_t * buffer)
{
return H5PTfree_vlen_readbuff( table_id, numStructs, buffer);
}
#endif /* VLPT_REMOVED */
/* Removed "ifdef VLPT_REMOVED" block. 03/08/2016, -BMR */