[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