[Liblas-commits] hg: add a ModifiesHeader method to
liblas::TransformI to hint re...
liblas-commits at liblas.org
liblas-commits at liblas.org
Tue Jan 25 15:18:03 EST 2011
details: http://hg.liblas.orghg/rev/8e82ca8320c0
changeset: 2819:8e82ca8320c0
user: Howard Butler <hobu.inc at gmail.com>
date: Tue Jan 25 14:17:58 2011 -0600
description:
add a ModifiesHeader method to liblas::TransformI to hint readers whether or not they have to do a header comparison check. Not doing that check every point is a good performance win and worth this extra complexity
diffstat:
apps/laskernel.hpp | 1 +
include/liblas/transform.hpp | 5 +++++
src/detail/reader/reader.cpp | 8 +++++++-
src/detail/reader/zipreader.cpp | 8 ++++++--
4 files changed, 19 insertions(+), 3 deletions(-)
diffs (83 lines):
diff -r aa4c6fb279a1 -r 8e82ca8320c0 apps/laskernel.hpp
--- a/apps/laskernel.hpp Tue Jan 25 14:04:20 2011 -0600
+++ b/apps/laskernel.hpp Tue Jan 25 14:17:58 2011 -0600
@@ -114,6 +114,7 @@
~OptechScanAngleFixer() {};
bool transform(liblas::Point& point);
+ bool ModifiesHeader() { return false; }
private:
OptechScanAngleFixer(OptechScanAngleFixer const& other);
diff -r aa4c6fb279a1 -r 8e82ca8320c0 include/liblas/transform.hpp
--- a/include/liblas/transform.hpp Tue Jan 25 14:04:20 2011 -0600
+++ b/include/liblas/transform.hpp Tue Jan 25 14:17:58 2011 -0600
@@ -61,6 +61,7 @@
public:
virtual bool transform(Point& point) = 0;
+ virtual bool ModifiesHeader() = 0;
virtual ~TransformI() {}
};
@@ -75,6 +76,7 @@
~ReprojectionTransform();
bool transform(Point& point);
+ bool ModifiesHeader() { return true; }
private:
@@ -102,6 +104,7 @@
~TranslationTransform();
bool transform(Point& point);
+ bool ModifiesHeader() { return false; }
enum OPER_TYPE
{
@@ -152,6 +155,8 @@
~ColorFetchingTransform();
bool transform(Point& point);
+ bool ModifiesHeader() { return true; }
+
private:
diff -r aa4c6fb279a1 -r 8e82ca8320c0 src/detail/reader/reader.cpp
--- a/src/detail/reader/reader.cpp Tue Jan 25 14:04:20 2011 -0600
+++ b/src/detail/reader/reader.cpp Tue Jan 25 14:17:58 2011 -0600
@@ -272,7 +272,13 @@
// point's HeaderPtr. We need to check if we need to set that
// back on any subsequent reads.
if (m_transforms.size() > 0)
- bNeedHeaderCheck = true;
+ {
+ for (std::vector<liblas::TransformPtr>::const_iterator i = transforms.begin(); i != transforms.end(); i++)
+ {
+ if (i->get()->ModifiesHeader())
+ bNeedHeaderCheck = true;
+ }
+ }
}
std::vector<liblas::TransformPtr> ReaderImpl::GetTransforms() const
diff -r aa4c6fb279a1 -r 8e82ca8320c0 src/detail/reader/zipreader.cpp
--- a/src/detail/reader/zipreader.cpp Tue Jan 25 14:04:20 2011 -0600
+++ b/src/detail/reader/zipreader.cpp Tue Jan 25 14:17:58 2011 -0600
@@ -395,8 +395,12 @@
// Transforms are allowed to change the point, including moving the
// point's HeaderPtr. We need to check if we need to set that
// back on any subsequent reads.
- if (m_transforms.size() > 0)
- bNeedHeaderCheck = true;
+ for (std::vector<liblas::TransformPtr>::const_iterator i = transforms.begin(); i != transforms.end(); i++)
+ {
+ if (i->get()->ModifiesHeader())
+ bNeedHeaderCheck = true;
+ }
+
}
std::vector<liblas::TransformPtr> ZipReaderImpl::GetTransforms() const
More information about the Liblas-commits
mailing list