Commit d48fe2e6 authored by apletzer's avatar apletzer

updating VizSchema version.

 ~ methods now enforce constness
 + support for edge and face data


git-svn-id: http://visit.ilight.com/svn/visit/trunk/src@22709 18c085ea-50e0-402c-830e-de6fd14e8384
parent 54796cf9
......@@ -18,12 +18,6 @@ ${COMMON_SOURCES}
avtVsFileFormat.C
avtVsOptions.C
VsFilter.C
VsH5Attribute.C
VsH5Dataset.C
VsH5File.C
VsH5Group.C
VsH5Object.C
VsH5Reader.C
VsLog.C
VsMDMesh.C
VsMDVariable.C
......@@ -38,6 +32,13 @@ VsVariable.C
VsVariableWithMesh.C
VsRegistry.C
VsRegistryObject.C
VsGroup.C
VsObject.C
VsDataset.C
VsAttribute.C
VsFile.C
VsReader.C
VsStaggeredField.C
)
SET(LIBE_SOURCES
......@@ -46,12 +47,6 @@ ${COMMON_SOURCES}
avtVsFileFormat.C
avtVsOptions.C
VsFilter.C
VsH5Attribute.C
VsH5Dataset.C
VsH5File.C
VsH5Group.C
VsH5Object.C
VsH5Reader.C
VsLog.C
VsMDMesh.C
VsMDVariable.C
......@@ -66,6 +61,12 @@ VsVariable.C
VsVariableWithMesh.C
VsRegistry.C
VsRegistryObject.C
VsGroup.C
VsObject.C
VsDataset.C
VsAttribute.C
VsFile.C
VsReader.C
)
INCLUDE_DIRECTORIES(
......
/*
* Main header file for VsApi
*
*
* $Id: $
*/
#include <VsAttribute.h>
#include <VsDataset.h>
#include <VsFile.h>
#include <VsFilter.h>
#include <VsGroup.h>
#include <VsLog.h>
#include <VsMDMesh.h>
#include <VsMDVariable.h>
#include <VsMesh.h>
#include <VsObject.h>
#include <VsReader.h>
#include <VsRectilinearMesh.h>
#include <VsRegistry.h>
#include <VsRegistryObject.h>
#include <VsSchema.h>
#include <VsStructuredMesh.h>
#include <VsUniformMesh.h>
#include <VsUnstructuredMesh.h>
#include <VsUtils.h>
#include <VsVariable.h>
#include <VsVariableWithMesh.h>
/*
* VsH5Attribute.cpp
* VsAttribute.cpp
*
* Created on: Apr 28, 2010
* Author: mdurant
*/
#include "VsH5Attribute.h"
#include "VsAttribute.h"
#include "VsLog.h"
#include <hdf5.h>
VsH5Attribute::VsH5Attribute(VsH5Object* parentObject, std::string attName, hid_t id):
VsH5Object(parentObject->registry, parentObject, attName, id) {
VsAttribute::VsAttribute(VsObject* parentObject, std::string attName, hid_t id):
VsObject(parentObject->registry, parentObject, attName, id) {
dataType = H5Aget_type(id);
}
VsH5Attribute::~VsH5Attribute() {
VsAttribute::~VsAttribute() {
hid_t id = getId();
if (id != -1) {
H5Aclose(id);
......@@ -23,7 +23,7 @@ VsH5Attribute::~VsH5Attribute() {
}
}
void VsH5Attribute::write() {
void VsAttribute::write() const {
std::string offset = "";
for (int i = 0; i < getDepth(); ++i) {
offset += " ";
......@@ -33,7 +33,7 @@ void VsH5Attribute::write() {
}
// Total length
size_t VsH5Attribute::getLength() {
size_t VsAttribute::getLength() const {
size_t len = 1;
for (size_t i = 0; i < dims.size(); ++i) {
len *= dims[i];
......@@ -41,14 +41,14 @@ size_t VsH5Attribute::getLength() {
return len;
}
herr_t VsH5Attribute::getStringValue(std::string* val) {
int VsAttribute::getStringValue(std::string* val) {
hid_t atype = H5Aget_type(getId());
H5T_class_t type = H5Tget_class(atype);
hid_t aspace = H5Aget_space(getId());
size_t rank = H5Sget_simple_extent_ndims(aspace);
if (type != H5T_STRING) {
VsLog::warningLog() <<"VsH5Attribute::getStringValue() - Requested attribute " <<getShortName()
VsLog::warningLog() <<"VsAttribute::getStringValue() - Requested attribute " <<getShortName()
<<" is not a string value." <<std::endl;
val->clear();
return -1;
......@@ -56,7 +56,7 @@ herr_t VsH5Attribute::getStringValue(std::string* val) {
//Yes, this is correct (rank != 0)
if (rank != 0) {
VsLog::warningLog() <<"VsH5Attribute::getStringValue() - Requested attribute " <<getShortName()
VsLog::warningLog() <<"VsAttribute::getStringValue() - Requested attribute " <<getShortName()
<<" is not a string value." <<std::endl;
val->clear();
return -1;
......@@ -65,7 +65,7 @@ herr_t VsH5Attribute::getStringValue(std::string* val) {
size_t len = H5Aget_storage_size(getId());
val->resize(len);
char* v = new char[len];
herr_t err = H5Aread(getId(), atype, v);
int err = H5Aread(getId(), atype, v);
// JRC: is this right?
// err = H5Aread(id, H5T_NATIVE_CHAR, v);
for (size_t i = 0; i < len; ++i) {
......@@ -74,7 +74,7 @@ herr_t VsH5Attribute::getStringValue(std::string* val) {
//and uses the 5th character for the null terminator
//In h5dump this shows up as a string "mesh" being declared as 5 characters
//If dumped to a terminal, it prints like so: "mesh^@"
VsLog::warningLog() <<"VsH5Attribute::getStringValue() - Found null char inside string attribute: " <<getFullName() <<std::endl;
VsLog::warningLog() <<"VsAttribute::getStringValue() - Found null char inside string attribute: " <<getFullName() <<std::endl;
val->resize(i);
break;
}
......@@ -86,8 +86,8 @@ herr_t VsH5Attribute::getStringValue(std::string* val) {
// JRC: This fat interface may not scale? What about
// scalar attributes?
herr_t VsH5Attribute::getIntVectorValue(std::vector<int>* ivals) {
herr_t err;
int VsAttribute::getIntVectorValue(std::vector<int>* ivals) {
int err;
size_t npoints;
hid_t atype = H5Aget_type(getId());
H5T_class_t type = H5Tget_class(atype);
......@@ -95,7 +95,7 @@ herr_t VsH5Attribute::getIntVectorValue(std::vector<int>* ivals) {
size_t rank = H5Sget_simple_extent_ndims(aspace);
if (type != H5T_INTEGER) {
VsLog::warningLog() <<"VsH5Attribute::getIntVectorValue() - Requested attribute " <<getShortName()
VsLog::warningLog() <<"VsAttribute::getIntVectorValue() - Requested attribute " <<getShortName()
<<" is not an integer vector." <<std::endl;
ivals->resize(0);
return -1;
......@@ -125,9 +125,9 @@ herr_t VsH5Attribute::getIntVectorValue(std::vector<int>* ivals) {
// JRC: This fat interface may not scale? What about
// scalar attributes?
herr_t VsH5Attribute::getFloatVectorValue(std::vector<float>* fvals) {
int VsAttribute::getFloatVectorValue(std::vector<float>* fvals) {
herr_t err = 0;
int err = 0;
size_t npoints;
hid_t atype = H5Aget_type(getId());
H5T_class_t type = H5Tget_class(atype);
......@@ -135,7 +135,7 @@ herr_t VsH5Attribute::getFloatVectorValue(std::vector<float>* fvals) {
size_t rank = H5Sget_simple_extent_ndims(aspace);
if (type != H5T_FLOAT) {
VsLog::warningLog() <<"VsH5Attribute::getFloatVectorValue() - Requested attribute " <<getShortName()
VsLog::warningLog() <<"VsAttribute::getFloatVectorValue() - Requested attribute " <<getShortName()
<<" is not a floating point vector." <<std::endl;
fvals->resize(0);
return -1;
......@@ -164,8 +164,8 @@ herr_t VsH5Attribute::getFloatVectorValue(std::vector<float>* fvals) {
// JRC: This fat interface may not scale? What about
// scalar attributes?
herr_t VsH5Attribute::getDoubleVectorValue(std::vector<double>* dvals) {
herr_t err = 0;
int VsAttribute::getDoubleVectorValue(std::vector<double>* dvals) {
int err = 0;
size_t npoints;
hid_t atype = H5Aget_type(getId());
H5T_class_t type = H5Tget_class(atype);
......@@ -173,7 +173,7 @@ herr_t VsH5Attribute::getDoubleVectorValue(std::vector<double>* dvals) {
size_t rank = H5Sget_simple_extent_ndims(aspace);
if (type != H5T_FLOAT) {
VsLog::warningLog() <<"VsH5Attribute::getDoubleVectorValue() - Requested attribute " <<getShortName()
VsLog::warningLog() <<"VsAttribute::getDoubleVectorValue() - Requested attribute " <<getShortName()
<<" is not a floating point vector." <<std::endl;
dvals->resize(0);
return -1;
......
/**
* @file VsH5Attribute.h
* @file VsAttribute.h
*
* @class VsH5Attribute
* @class VsAttribute
* @brief Represents an hdf5 attribute from an hdf5 file.
*
* Saves the name and hdf5 id of an attribute. Provides
......@@ -12,33 +12,33 @@
* Author: mdurant
*/
#ifndef VSH5ATTRIBUTE_H_
#define VSH5ATTRIBUTE_H_
#ifndef VS_ATTRIBUTE_H_
#define VS_ATTRIBUTE_H_
#include "VsH5Object.h"
#include "VsObject.h"
#include <vector>
#include <string>
#include <map>
class VsH5Attribute: public VsH5Object {
class VsAttribute: public VsObject {
public:
VsH5Attribute(VsH5Object* parentObject, std::string attName, hid_t id);
virtual ~VsH5Attribute();
VsAttribute(VsObject* parentObject, std::string attName, hid_t id);
virtual ~VsAttribute();
void write();
hid_t getType() { return dataType; }
size_t getLength();
void write() const;
hid_t getType() const { return dataType; }
size_t getLength() const;
// Get the value of this attribute
// CAUTION: Calling the incorrect accessor will result in invalid or null data
herr_t getStringValue(std::string* val);
herr_t getIntVectorValue(std::vector<int>* ivals);
herr_t getFloatVectorValue(std::vector<float>* fvals);
herr_t getDoubleVectorValue(std::vector<double>* dvals);
int getStringValue(std::string* val);
int getIntVectorValue(std::vector<int>* ivals);
int getFloatVectorValue(std::vector<float>* fvals);
int getDoubleVectorValue(std::vector<double>* dvals);
private:
hid_t dataType;
std::vector<int> dims;
};
#endif /* VSH5ATTRIBUTE_H_ */
#endif /* VS_ATTRIBUTE_H_ */
/*
* VsH5Dataset.cpp
* VsDataset.cpp
*
* Created on: Apr 27, 2010
* Author: mdurant
*/
#include "VsH5Dataset.h"
#include "VsH5Attribute.h"
#include "VsDataset.h"
#include "VsAttribute.h"
#include "VsLog.h"
#include "VsSchema.h"
#include <iostream>
......@@ -19,8 +19,9 @@
#include "VsVariable.h"
#include "VsVariableWithMesh.h"
VsH5Dataset::VsH5Dataset(VsRegistry* r, VsH5Object* parentObject, std::string datasetName, hid_t id):
VsH5Object(r, parentObject, datasetName, id){
VsDataset::VsDataset(VsRegistry* r, VsObject* parentObject,
const std::string& datasetName, hid_t id):
VsObject(r, parentObject, datasetName, id){
dataType = H5Tget_native_type(H5Dget_type(id), H5T_DIR_DEFAULT);
loadDims();
......@@ -28,7 +29,7 @@ VsH5Dataset::VsH5Dataset(VsRegistry* r, VsH5Object* parentObject, std::string da
registry->add(this);
}
VsH5Dataset::~VsH5Dataset() {
VsDataset::~VsDataset() {
hid_t id = this->getId();
if (id != -1) {
H5Dclose(id);
......@@ -40,7 +41,7 @@ VsH5Dataset::~VsH5Dataset() {
// Total length
size_t VsH5Dataset::getLength() {
size_t VsDataset::getLength() const {
size_t len = 1;
for (size_t i = 0; i < dims.size(); ++i) {
len *= dims[i];
......@@ -48,12 +49,12 @@ size_t VsH5Dataset::getLength() {
return len;
}
void VsH5Dataset::loadDims() {
void VsDataset::loadDims() {
hid_t space = H5Dget_space(getId());
size_t rank = H5Sget_simple_extent_ndims(space);
if (rank <= 0) {
VsLog::errorLog() <<"VsH5Dataset::loadDims() - Rank was <= 0 for dataset: " <<getFullName() <<std::endl;
VsLog::errorLog() <<"VsDataset::loadDims() - Rank was <= 0 for dataset: " << getFullName() <<std::endl;
return;
}
std::vector<hsize_t> sdim(rank);
......@@ -64,15 +65,14 @@ void VsH5Dataset::loadDims() {
}
}
std::vector<int> VsH5Dataset::getDims() {
std::vector<int> VsDataset::getDims() const {
return dims;
}
void VsH5Dataset::write() {
void VsDataset::write() const {
std::string offset = "";
for (int i = 0; i < getDepth(); ++i) {
offset += " ";
}
VsLog::debugLog() << offset<<getFullName() <<"(" <<getId() <<")" <<std::endl;
VsLog::debugLog() << offset << getFullName() <<"(" <<getId() <<")" << std::endl;
}
/**
* @file VsDataset.h
*
* @class VsDataset
* @brief Represents a dataset stored in an hdf5 file.
*
* Provides accessors to retrieve attributes and data from
* an hdf5 file.
*
* Created on: Apr 27, 2010
* Author: mdurant
*/
#ifndef VS_DATASET_H_
#define VS_DATASET_H_
#include <string>
#include "VsObject.h"
#include <hdf5.h>
#include <vector>
#include <map>
class VsAttribute;
class VsDataset : public VsObject {
public:
/**
* Constructor
*/
VsDataset(VsRegistry* r, VsObject* parentObject,
const std::string& datasetName, hid_t id);
/**
* Destructor
*/
virtual ~VsDataset();
/**
* Write debug information to log file
*/
void write() const;
/**
* Get the total number of data values
* @return number
*/
size_t getLength() const;
/**
* Get the dimensions
* @return number of values along each axis
*/
std::vector<int> getDims() const;
/**
* Get the number of dimensions (rank)
* @return number
*/
size_t getNumDims() const { return this->dims.size(); }
/**
* Get the hdf5 type
* @return type
*/
hid_t getType() const { return this->dataType; }
private:
std::vector<int> dims;
hid_t dataType;
std::vector<VsAttribute*> attributes;
void loadDims();
};
#endif /* VS_DATASET_H_ */
/*
* VsH5File.cpp
* VsFile.cpp
*
* Created on: Apr 27, 2010
* Author: mdurant
*/
#include "VsH5File.h"
#include "VsFile.h"
#include "VsLog.h"
#include "VsFilter.h"
#include "hdf5.h"
#include "visit-hdf5.h"
#include "VsH5Dataset.h"
#include "VsH5Group.h"
#include "VsDataset.h"
#include "VsGroup.h"
#include "VsVariable.h"
#include "VsVariableWithMesh.h"
#include "VsRectilinearMesh.h"
#include "VsUniformMesh.h"
#include "VsUnstructuredMesh.h"
#include "VsStructuredMesh.h"
//#include <stdlib.h>
VsH5File::VsH5File(VsRegistry* r, std::string name, hid_t id):
VsH5Object(r, NULL, name, id) {
VsFile::VsFile(VsRegistry* r, std::string name, hid_t id):
VsObject(r, NULL, name, id) {
fileName = name;
VsLog::debugLog() <<"File name is: " <<name <<std::endl;
......@@ -49,7 +46,7 @@ VsH5File::VsH5File(VsRegistry* r, std::string name, hid_t id):
}
VsH5File::~VsH5File() {
VsFile::~VsFile() {
//we clear all objects that were read from this file
//so that we can close the file itself.
//Note that this does not delete the registry object
......@@ -70,7 +67,7 @@ VsH5File::~VsH5File() {
//Don't print a warning for the file itself, we know it's still open.
if (anobj != getId()) {
H5I_type_t ot = H5Iget_type(anobj);
herr_t status = H5Iget_name(anobj, objName, 1024);
int status = H5Iget_name(anobj, objName, 1024);
VsLog::debugLog() << "type = " << ot << ", name = " << objName <<", id = " <<anobj <<std::endl;;
}
}
......@@ -83,11 +80,11 @@ VsH5File::~VsH5File() {
H5Fclose(getId());
}
std::string VsH5File::getName() {
std::string VsFile::getName() const {
return "/";
}
void VsH5File::write() {
void VsFile::write() const {
VsLog::debugLog() <<"File: " <<fileName <<std::endl;
}
/**
* @file VsH5File.h
* @file VsFile.h
*
* @class VsH5File
* @class VsFile
* @brief Represents an hdf5 data file
*
* Created on: Apr 27, 2010
* Author: mdurant
*/
#ifndef VSH5FILE_H_
#define VSH5FILE_H_
#ifndef VS_FILE_H_
#define VS_FILE_H_
#include <string>
#include "VsH5Group.h"
#include "VsH5Object.h"
#include "VsGroup.h"
#include "VsObject.h"
#include <hdf5.h>
class VsH5File : public VsH5Object {
class VsFile : public VsObject {
public:
VsH5File(VsRegistry* r, std::string name, hid_t id);
virtual ~VsH5File();
VsFile(VsRegistry* r, std::string name, hid_t id);
virtual ~VsFile();
std::string getName();
void write();
std::string getName() const;
void write() const;
private:
std::string fileName;
};
#endif /* VSH5FILE_H_ */
#endif /* VS_FILE_H_ */
#include <hdf5.h>
#include <visit-hdf5.h>
#if HDF5_VERSION_GE(1,8,1)
/**
*
* @file VsFilter.cpp
*
* @brief Implementation for inspecting an HDF5 file
*
* @version $Id: VsFilter.C 496 2009-08-05 22:57:22Z mdurant $
* @version $Id: VsFilter.cpp 2 2013-02-20 20:11:25Z sveta $
*
* Copyright &copy; 2007-2008, Tech-X Corporation
* See LICENSE file for conditions of use.
......@@ -21,63 +19,30 @@
#include <hdf5.h>
#include <stdlib.h>
#include "VsLog.h"
#include "VsH5File.h"
#include "VsH5Object.h"
#include "VsH5Dataset.h"
#include "VsH5Attribute.h"
#include "VsFile.h"
#include "VsObject.h"
#include "VsDataset.h"
#include "VsAttribute.h"
#include "VsRegistry.h"
//
// These routines detect whether the file looks like a certain flavor of
// HDF5 file reader. If the flavor is detected, we throw an exception so
// the proper reader can be used instead of Vs.
//
static bool IsTyphonIO(int fileId)
{
//
//See if file is TyphonIO/TyphonIO[v0] format
//
hid_t tio_root = H5Gopen(fileId, "/", H5P_DEFAULT);
hid_t tio_version = H5Aopen_name(tio_root, "TIO_version_major");
if (tio_version >= 0)
{
H5Aclose(tio_version);
H5Gclose(tio_root);
VsLog::errorLog() <<"VsH5File::DetectTyphonIO(): Cannot be a Vs file because it looks like a TyphonIO file." << std::endl;
return true;
}
if (tio_root >= 0) H5Gclose(tio_root);
hid_t tio_info = H5Gopen(fileId, "/TyphonIO_FileInfo", H5P_DEFAULT);
if (tio_info >= 0)
{
H5Gclose(tio_info);
VsLog::errorLog() <<"VsH5File::DetectTyphonIO(): Cannot be a Vs file because it looks like a TyphonIO file." << std::endl;
return true;
}
return false;
}
struct RECURSION_DATA {
VsRegistry* registry;
VsH5Object* parent;
VsObject* parent;
};
VsH5File* VsFilter::readFile(VsRegistry* registry, std::string fileName) {
VsFile* VsFilter::readFile(VsRegistry* registry, std::string fileName) {
hid_t fapl = H5Pcreate(H5P_FILE_ACCESS);
H5Pset_fclose_degree(fapl, H5F_CLOSE_SEMI);
hid_t fileId = H5Fopen(fileName.c_str(), H5F_ACC_RDONLY, fapl);
H5Pclose(fapl);
if (fileId < 0) {
VsLog::errorLog() << "VsH5File::readFile(): HDF5 error opening the file '"
VsLog::errorLog() << "VsFile::readFile(): HDF5 error opening the file '"
<< fileName << "'." << std::endl;
return NULL;
}
VsH5File* file = new VsH5File(registry, fileName, fileId);
//Check to see if its a TyphonIO fileI
if (IsTyphonIO(fileId)) return NULL;
VsFile* file = new VsFile(registry, fileName, fileId);
RECURSION_DATA data;
data.registry = registry;
data.parent = NULL;
......@@ -86,7 +51,7 @@ VsH5File* VsFilter::readFile(VsRegistry* registry, std::string fileName) {
return file;
}
herr_t VsFilter::visitLinks(hid_t locId, const char* name,
int VsFilter::visitLinks(hid_t locId, const char* name,
const H5L_info_t *linfo, void* opdata) {
VsLog::debugLog() <<"VsFilter::visitLinks() - looking at object " <<name <<std::endl;
......@@ -196,9 +161,9 @@ herr_t VsFilter::visitLinks(hid_t locId, const char* name,
return 0;
}
herr_t VsFilter::visitGroup(hid_t locId, const char* name, void* opdata) {
int VsFilter::visitGroup(hid_t locId, const char* name, void* opdata) {
RECURSION_DATA* data = static_cast< RECURSION_DATA* >(opdata);
VsH5Group* parent = static_cast< VsH5Group*> (data->parent);
VsGroup* parent = static_cast< VsGroup*> (data->parent);
VsRegistry* registry = data->registry;
VsLog::debugLog() << "VsFilter::visitGroup: node '" << name
......@@ -214,7 +179,7 @@ herr_t VsFilter::visitGroup(hid_t locId, const char* name, void* opdata) {
return 0;
}
VsH5Group* newGroup = new VsH5Group(registry, parent, name, groupId);
VsGroup* newGroup = new VsGroup(registry, parent, name, groupId);
RECURSION_DATA nextLevelData;
nextLevelData.registry = registry;
......@@ -228,7 +193,7 @@ herr_t VsFilter::visitGroup(hid_t locId, const char* name, void* opdata) {
VsLog::debugLog() <<"VsFilter::visitGroup(): Recursing on children of group " <<newGroup->getFullName() <<std::endl;
H5Literate(groupId, H5_INDEX_NAME, H5_ITER_INC, NULL, visitLinks, &nextLevelData);
// Not needed because the newly declared VsH5Group takes ownership of the id
// Not needed because the newly declared VsGroup takes ownership of the id
// And will do the H5GClose when it is deleted
// H5Gclose(groupId);
......@@ -236,9 +201,9 @@ herr_t VsFilter::visitGroup(hid_t locId, const char* name, void* opdata) {
return 0;
}
herr_t VsFilter::visitDataset(hid_t locId, const char* name, void* opdata) {
int VsFilter::visitDataset(hid_t locId, const char* name, void* opdata) {
RECURSION_DATA* data = static_cast< RECURSION_DATA* >(opdata);
VsH5Group* parent = static_cast< VsH5Group*>(data->parent);
VsGroup* parent = static_cast< VsGroup*>(data->parent);
VsRegistry* registry = data->registry;
VsLog::debugLog() << "VsFilter::visitDataset: node '" << name
......@@ -246,7 +211,7 @@ herr_t VsFilter::visitDataset(hid_t locId, const char* name, void* opdata) {
hid_t datasetId = H5Dopen(locId, name, H5P_DEFAULT);
VsH5Dataset* newDataset = new VsH5Dataset(registry, parent, name, datasetId);
VsDataset* newDataset = new VsDataset(registry, parent, name, datasetId);
//If unable to get a handle to the hdf5 object, we just drop the object
//But return 0 to continue iterating over objects
......@@ -267,10 +232,10 @@ herr_t VsFilter::visitDataset(hid_t locId, const char* name, void* opdata) {
return 0;
}
herr_t VsFilter::visitAttrib(hid_t dId, const char* name,
int VsFilter::visitAttrib(hid_t dId, const char* name,
const H5A_info_t* ai, void* opdata) {
RECURSION_DATA* data = static_cast< RECURSION_DATA* >(opdata);
VsH5Object* parent = data->parent;
VsObject* parent = data->parent;
VsLog::debugLog() << "VsFilter::visitAttrib(...): getting attribute '" <<
name << "'." << std::endl;
......@@ -288,4 +253,3 @@ herr_t VsFilter::visitAttrib(hid_t dId, const char* name,
return 0;
}
#endif
......@@ -7,14 +7,12 @@
*
* VsFilter contains a set of static classes that interface
* with hdf5 recursive reading routines. VsFilter creates
* VsH5Group, VsH5Dataset, and VsH5Attribute objects to
* VsGroup, VsDataset, and VsAttribute objects to
* represent the contents of the hdf5 file.