Skip to content

Commit

Permalink
set endianness bits at consturction time
Browse files Browse the repository at this point in the history
  • Loading branch information
mpgerlek committed Sep 29, 2011
1 parent e693cc0 commit 165a489
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 91 deletions.
79 changes: 16 additions & 63 deletions src/filters/ByteSwapFilter.cpp
Expand Up @@ -69,23 +69,22 @@ void ByteSwapFilter::initialize()
this->setNumPoints(stage.getNumPoints());
this->setPointCountType(stage.getPointCountType());

//Schema& schema = this->getSchemaRef();

// FIXME: this doesn't work anymore
// std::vector<Dimension>& dimensions = schema.getDimensions();
// for (std::vector<Dimension>::iterator i = dimensions.begin(); i != dimensions.end(); ++i)
// {
// pdal::EndianType t = i->getEndianness();
// if (t == Endian_Little)
// {
// i->setEndianness(Endian_Big);
// } else if (t == Endian_Big)
// {
// i->setEndianness(Endian_Little);
// } else {
// throw pdal_error("ByteSwapFilter can only swap big/little endian dimensions");
// }
// }
Schema& schema = this->getSchemaRef();

std::vector<Dimension>& dimensions = schema.getDimensions();
for (std::vector<Dimension>::iterator i = dimensions.begin(); i != dimensions.end(); ++i)
{
pdal::EndianType t = i->getEndianness();
if (t == Endian_Little)
{
i->setEndianness(Endian_Big);
} else if (t == Endian_Big)
{
i->setEndianness(Endian_Little);
} else {
throw pdal_error("ByteSwapFilter can only swap big/little endian dimensions");
}
}

return;
}
Expand Down Expand Up @@ -125,52 +124,6 @@ boost::uint32_t ByteSwapFilter::processBuffer(PointBuffer& dstData, const PointB

}


for (boost::uint32_t i = 0; i < dstDims.size(); ++i)
{
Dimension& d = dstSchema.getDimension(i);
if (d.getEndianness() == Endian_Little)
d.setEndianness(Endian_Big);
if (d.getEndianness() == Endian_Big)
d.setEndianness(Endian_Little);
}





//
// int fieldX = schema.getDimensionIndex(Dimension_X, Dimension::Double);
// int fieldY = schema.getDimensionIndex(Dimension_Y, Dimension::Double);
// int fieldZ = schema.getDimensionIndex(Dimension_Z, Dimension::Double);
//
// const Bounds<double>& bounds = this->getBounds();
//
// boost::uint32_t numSrcPoints = srcData.getNumPoints();
// boost::uint32_t dstIndex = dstData.getNumPoints();
//
// boost::uint32_t numPointsAdded = 0;
//
// for (boost::uint32_t srcIndex=0; srcIndex<numSrcPoints; srcIndex++)
// {
//
// double x = srcData.getField<double>(srcIndex, fieldX);
// double y = srcData.getField<double>(srcIndex, fieldY);
// double z = srcData.getField<double>(srcIndex, fieldZ);
// Vector<double> point(x,y,z);
//
// if (bounds.contains(point))
// {
// dstData.copyPointFast(dstIndex, srcIndex, srcData);
// dstData.setNumPoints(dstIndex+1);
// ++dstIndex;
// ++numPointsAdded;
// }
// }
//
// assert(dstIndex <= dstData.getCapacity());

// dstData.setNumPoints(dstData.getCapacity());
return dstData.getNumPoints();
}

Expand Down
38 changes: 10 additions & 28 deletions test/unit/ByteSwapFilterTest.cpp
Expand Up @@ -65,10 +65,19 @@ BOOST_AUTO_TEST_CASE(test_swapping)

filter.initialize();

BOOST_CHECK_EQUAL(reader.getSchema().getDimension(DimensionId::X_f64).getEndianness(), pdal::Endian_Little);
BOOST_CHECK_EQUAL(reader.getSchema().getDimension(DimensionId::Y_f64).getEndianness(), pdal::Endian_Little);
BOOST_CHECK_EQUAL(reader.getSchema().getDimension(DimensionId::Z_f64).getEndianness(), pdal::Endian_Little);
BOOST_CHECK_EQUAL(reader.getSchema().getDimension(DimensionId::Time_u64).getEndianness(), pdal::Endian_Little);
BOOST_CHECK_EQUAL(filter.getSchema().getDimension(DimensionId::X_f64).getEndianness(), pdal::Endian_Big);
BOOST_CHECK_EQUAL(filter.getSchema().getDimension(DimensionId::Y_f64).getEndianness(), pdal::Endian_Big);
BOOST_CHECK_EQUAL(filter.getSchema().getDimension(DimensionId::Z_f64).getEndianness(), pdal::Endian_Big);
BOOST_CHECK_EQUAL(filter.getSchema().getDimension(DimensionId::Time_u64).getEndianness(), pdal::Endian_Big);

boost::scoped_ptr<StageSequentialIterator> unflipped_iter(reader.createSequentialIterator());
boost::scoped_ptr<StageSequentialIterator> flipped_iter(filter.createSequentialIterator());

const Schema& schema = reader.getSchema();
const Schema& schema = filter.getSchema();

PointBuffer flipped(schema, buffer_size);
const boost::uint32_t fliped_read = flipped_iter->read(flipped);
Expand Down Expand Up @@ -119,33 +128,6 @@ BOOST_AUTO_TEST_CASE(test_swapping)
SWAP_ENDIANNESS(reflipped_t);
BOOST_CHECK_EQUAL(unflipped_t, reflipped_t);
}
//
// // 1000 * 1/3 = 333, plus or minus a bit for rounding
// BOOST_CHECK(Utils::compare_approx<double>(static_cast<double>(numWritten), 333, 6));
//
// const double minX = writer.getMinX();
// const double minY = writer.getMinY();
// const double minZ = writer.getMinZ();
// const double maxX = writer.getMaxX();
// const double maxY = writer.getMaxY();
// const double maxZ = writer.getMaxZ();
// const double avgX = writer.getAvgX();
// const double avgY = writer.getAvgY();
// const double avgZ = writer.getAvgZ();
//
// const double delX = 10.0 / 999.0;
// const double delY = 100.0 / 999.0;
// const double delZ = 1000.0 / 999.0;
//
// BOOST_CHECK(Utils::compare_approx<double>(minX, 3.33333, delX));
// BOOST_CHECK(Utils::compare_approx<double>(minY, 33.33333, delY));
// BOOST_CHECK(Utils::compare_approx<double>(minZ, 333.33333, delZ));
// BOOST_CHECK(Utils::compare_approx<double>(maxX, 6.66666, delX));
// BOOST_CHECK(Utils::compare_approx<double>(maxY, 66.66666, delY));
// BOOST_CHECK(Utils::compare_approx<double>(maxZ, 666.66666, delZ));
// BOOST_CHECK(Utils::compare_approx<double>(avgX, 5.00000, delX));
// BOOST_CHECK(Utils::compare_approx<double>(avgY, 50.00000, delY));
// BOOST_CHECK(Utils::compare_approx<double>(avgZ, 500.00000, delZ));

return;
}
Expand Down

0 comments on commit 165a489

Please sign in to comment.