Skip to content

Commit

Permalink
Compiles!
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryan Pals committed Jan 28, 2020
1 parent c4ce3d2 commit b81353e
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 108 deletions.
65 changes: 47 additions & 18 deletions plugins/hdf/io/Hdf5Handler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,24 +47,26 @@ Hdf5Handler::Hdf5Handler()
{ }

void Hdf5Handler::initialize(
const std::string& filename,
const std::vector<Hdf5ColumnData>& columns)
const std::string& filename)
{
try
{
int numPoints = 1065; // TODO pull this out of the file
m_h5File.reset(new H5::H5File(filename, H5F_ACC_RDONLY));

std::cout << "Number of HD5 Objects: " << m_h5File.get()->getObjCount() <<std::endl;
H5::DataSet dset = m_h5File.get()->openDataSet("/autzen");
H5::DataSpace dspace = dset.getSpace();
std::cout << "Number of dataspace dimensions: " << dspace.getSimpleExtentNdims() << std::endl;
H5::CompType ctype = dset.getCompType();//H5::CompType(dset);
m_numPoints = ctype.getNmembers();
std::cout << "Number of points: " << m_numPoints << std::endl;
std::cout << "Point length: " << ctype.getSize() << std::endl;
std::cout << "Number of HDF compound type members (PDAL dimensions): " << ctype.getNmembers() << std::endl;

// print names
for(int j = 0; j < ctype.getNmembers(); ++j) {
// m_dimNames.push_back(ctype.getMemberName(j));

H5T_class_t vauge_type = ctype.getMemberDataType(j).getClass();
H5::IntType int_type = ctype.getMemberIntType(j);
H5::FloatType float_type = ctype.getMemberFloatType(j);
Expand All @@ -75,21 +77,44 @@ void Hdf5Handler::initialize(
break;
case H5T_INTEGER:
if(int_type.getSign() == H5T_SGN_NONE) {
m_dimInfos.push_back(DimInfo(
ctype.getMemberName(j),
vauge_type,
int_type.getOrder(),
int_type.getSize(),
int_type.getOffset())
);
std::cout << "uint, s:" << int_type.getSize() << ", e:" << int_type.getOrder();
} else if(int_type.getSign() == H5T_SGN_2) {
m_dimInfos.push_back(DimInfo(
ctype.getMemberName(j),
vauge_type,
int_type.getOrder(),
int_type.getSize(),
int_type.getOffset())
);
std::cout << "sint, s:" << int_type.getSize() << ", e:" << int_type.getOrder();
} else {
std::cout << "sign error";
}
break;
case H5T_FLOAT:
std::cout << "float, s:" << float_type.getSize() << ", e:" << float_type.getOrder();
m_dimInfos.push_back(DimInfo(
ctype.getMemberName(j),
vauge_type,
float_type.getOrder(),
float_type.getSize(),
float_type.getOffset())
);
break;
default:
std::cout << "Unkown type: " << vauge_type;
}
std::cout << ", o:" << ctype.getMemberOffset(j) << ", " << ctype.getMemberName(j);
std::cout << std::endl;


}
}
catch (const H5::FileIException&)
Expand All @@ -100,21 +125,21 @@ void Hdf5Handler::initialize(
try
{
// Open each HDF5 DataSet and its corresponding DataSpace.
for (const auto& col : columns)
{
const std::string dataSetName = col.name;
const H5::PredType predType = col.predType;
const H5::DataSet dataSet = m_h5File->openDataSet(dataSetName);
const H5::DataSpace dataSpace = dataSet.getSpace();

m_columnDataMap.insert(std::make_pair(
dataSetName,
ColumnData(predType, dataSet, dataSpace)));

// Does not check whether all the columns are the same length.
m_numPoints = (std::max)((uint64_t)getColumnNumEntries(dataSetName),
m_numPoints);
}
// for (const auto& col : columns)
// {
// const std::string dataSetName = col.name;
// const H5::PredType predType = col.predType;
// const H5::DataSet dataSet = m_h5File->openDataSet(dataSetName);
// const H5::DataSpace dataSpace = dataSet.getSpace();

// m_columnDataMap.insert(std::make_pair(
// dataSetName,
// ColumnData(predType, dataSet, dataSpace)));

// // Does not check whether all the columns are the same length.
// m_numPoints = (std::max)((uint64_t)getColumnNumEntries(dataSetName),
// m_numPoints);
// }
}
catch (const H5::Exception&)
{
Expand Down Expand Up @@ -163,6 +188,10 @@ void Hdf5Handler::getColumnEntries(
}
}

std::vector<pdal::hdf5::DimInfo> Hdf5Handler::getDimensionInfos() {
return m_dimInfos;
}

hsize_t
Hdf5Handler::getColumnNumEntries(const std::string& dataSetName) const
{
Expand Down
30 changes: 28 additions & 2 deletions plugins/hdf/io/Hdf5Handler.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,29 @@ namespace hdf5
const std::string name;
const H5::PredType predType;
};

struct DimInfo
{
DimInfo(
const std::string& name,
const H5T_class_t hdf_type,
const H5T_order_t endianness,
const size_t s,
const int offset)
: name(name)
, hdf_type(hdf_type)
, endianness(endianness)
, s(s)
, offset(offset)
{ }

std::string name;
H5T_class_t hdf_type;
H5T_order_t endianness;
size_t s;
int offset;
};

}

class Hdf5Handler
Expand All @@ -71,11 +94,12 @@ class Hdf5Handler
Hdf5Handler();

void initialize(
const std::string& filename,
const std::vector<hdf5::Hdf5ColumnData>& columns);
const std::string& filename);
// const std::vector<hdf5::Hdf5ColumnData>& columns);
void close();

uint64_t getNumPoints() const;
std::vector<pdal::hdf5::DimInfo> getDimensionInfos();

void getColumnEntries(
void* data,
Expand Down Expand Up @@ -106,6 +130,8 @@ class Hdf5Handler
H5::DataSpace dataSpace;
};

// std::vector<std::string> m_dimNames;
std::vector<pdal::hdf5::DimInfo> m_dimInfos;
hsize_t getColumnNumEntries(const std::string& dataSetName) const;
const ColumnData& getColumnData(const std::string& dataSetName) const;

Expand Down

0 comments on commit b81353e

Please sign in to comment.