[Liblas-commits] hg: 2 new changesets

liblas-commits at liblas.org liblas-commits at liblas.org
Fri Oct 29 19:39:41 EDT 2010


changeset 99861dbca01f in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=99861dbca01f
summary: Removed Point::setup() and perform all initialization on construction.

changeset eeebdd47e056 in /Volumes/Data/www/liblas.org/hg
details: http://hg.liblas.orghg?cmd=changeset;node=eeebdd47e056
summary: LASReader ctor takes read-only header making copy. Optimized a bit constructing iterators and other objects as close to their use as possible, removed some redundant bits of code.

diffstat:

 include/liblas/detail/reader/point.hpp |    3 -
 include/liblas/lasreader.hpp           |    9 +-
 src/detail/reader/point.cpp            |   18 ++---
 src/lasreader.cpp                      |  105 +++++++++++++++++---------------
 4 files changed, 66 insertions(+), 69 deletions(-)

diffs (truncated from 341 to 300 lines):

diff -r a18904ebcf06 -r eeebdd47e056 include/liblas/detail/reader/point.hpp
--- a/include/liblas/detail/reader/point.hpp	Fri Oct 29 09:29:38 2010 -0500
+++ b/include/liblas/detail/reader/point.hpp	Sat Oct 30 00:39:26 2010 +0100
@@ -81,9 +81,6 @@
     HeaderPtr m_header;
     liblas::Point m_point;
     std::vector<boost::uint8_t> m_raw_data;
-    
-    void setup();
-
 };
 
 
diff -r a18904ebcf06 -r eeebdd47e056 include/liblas/lasreader.hpp
--- a/include/liblas/lasreader.hpp	Fri Oct 29 09:29:38 2010 -0500
+++ b/include/liblas/lasreader.hpp	Sat Oct 30 00:39:26 2010 +0100
@@ -72,14 +72,14 @@
     /// @exception std::runtime_error - on failure state of the input stream.
     Reader(std::istream& ifs);
     Reader(std::istream& ifs, boost::uint32_t cache_size);
-    Reader(std::istream& ifs, boost::uint32_t cache_size, Header& header);
+    Reader(std::istream& ifs, boost::uint32_t cache_size, Header const& header);
     Reader(ReaderI* reader);
     
     
     /// User-defined consructor initializes reader with input stream and
     /// a header to override the values in the file
     /// @exception std::runtime_error - on failure state of the input stream.
-    Reader(std::istream& ifs, Header& header);
+    Reader(std::istream& ifs, Header const& header);
     
     /// Destructor.
     /// @exception nothrow
@@ -188,12 +188,9 @@
     TransformPtr m_reprojection_transform;
 
     SpatialReference m_out_srs;
-    SpatialReference m_in_srs;
-    
+    SpatialReference m_in_srs;  
 };
 
-
-
 } // namespace liblas
 
 #endif // ndef LIBLAS_LASREADER_HPP_INCLUDED
diff -r a18904ebcf06 -r eeebdd47e056 src/detail/reader/point.cpp
--- a/src/detail/reader/point.cpp	Fri Oct 29 09:29:38 2010 -0500
+++ b/src/detail/reader/point.cpp	Sat Oct 30 00:39:26 2010 +0100
@@ -58,9 +58,9 @@
 Point::Point(std::istream& ifs, HeaderPtr header)
     : m_ifs(ifs)
     , m_header(header)
-
+    , m_point(m_header)
+    , m_raw_data(m_header->GetSchema().GetByteSize())
 {
-    setup();
 }
 
 Point::~Point()
@@ -69,28 +69,26 @@
 
 std::istream& Point::GetStream() const
 {
-    return m_ifs;
+    return m_ifs
 }
 
 void Point::read()
 {
-    
+    assert(m_header);
+    assert(m_point.GetHeaderPtr());
+    assert(m_raw_data.size() > 0);
+
     try
     {
         detail::read_n(m_raw_data.front(), m_ifs, m_raw_data.size());
     }
     catch (std::out_of_range const& e) // we reached the end of the file
     {
+        // FIXME: Why do we kill the error? It cause setting m_point with invali data, doesn't it? --mloskot
         std::cerr << e.what() << std::endl;
     }    
     
     m_point.SetData(m_raw_data);
 }
 
-void Point::setup()
-{
-    m_raw_data.resize(m_header->GetSchema().GetByteSize());
-    m_point.SetHeaderPtr(m_header);
-}
-
 }}} // namespace liblas::detail::reader
diff -r a18904ebcf06 -r eeebdd47e056 src/lasreader.cpp
--- a/src/lasreader.cpp	Fri Oct 29 09:29:38 2010 -0500
+++ b/src/lasreader.cpp	Sat Oct 30 00:39:26 2010 +0100
@@ -64,68 +64,59 @@
 
 Reader::Reader(std::istream& ifs) :
     m_pimpl(new detail::CachedReaderImpl(ifs,3)),
-    m_header(HeaderPtr()),
     m_point(0),
     m_empty_point(new Point()),
     bCustomHeader(false),
     m_filters(0),
-    m_transforms(0),
-    m_reprojection_transform(TransformPtr())
+    m_transforms(0)
 {
     Init();
 }
 
 Reader::Reader(std::istream& ifs, uint32_t cache_size) :
     m_pimpl(new detail::CachedReaderImpl(ifs, cache_size)),
-    m_header(HeaderPtr()),
     m_point(0),
     m_empty_point(new Point()),
     bCustomHeader(false),
     m_filters(0),
-    m_transforms(0),
-    m_reprojection_transform(TransformPtr())
+    m_transforms(0)
 {
     Init();
 }
 
-Reader::Reader(std::istream& ifs, uint32_t cache_size, Header& header) :
+Reader::Reader(std::istream& ifs, uint32_t cache_size, Header const& header) :
     m_pimpl(new detail::CachedReaderImpl(ifs, cache_size)),
-    m_header(HeaderPtr( )),    
+    m_header(new Header(header)),
     m_point(0),
     m_empty_point(new Point()),
     bCustomHeader(true),
     m_filters(0),
-    m_transforms(0),
-    m_reprojection_transform(TransformPtr())
+    m_transforms(0)
 {
     // if we have a custom header, create a slot for it and then copy 
     // the header we were given
-    m_header = HeaderPtr(new Header(header));
+
     Init();
 }
 
 Reader::Reader(ReaderI* reader) :
     m_pimpl(reader),
-    m_header(HeaderPtr()),
     m_point(0),
     m_empty_point(new Point()),
     bCustomHeader(false),
     m_filters(0),
-    m_transforms(0),
-    m_reprojection_transform(TransformPtr())
+    m_transforms(0)
 {
     Init();
 }
 
-Reader::Reader(std::istream& ifs, Header& header) :
+Reader::Reader(std::istream& ifs, Header const& header) :
     m_pimpl(new detail::ReaderImpl(ifs)),
-    m_header(HeaderPtr( )),    
     m_point(0),
     m_empty_point(new Point()),
     bCustomHeader(true),
     m_filters(0),
-    m_transforms(0),
-    m_reprojection_transform(TransformPtr())
+    m_transforms(0)
 {
     // if we have a custom header, create a slot for it and then copy 
     // the header we were given
@@ -155,18 +146,19 @@
 }
 
 bool Reader::KeepPoint(liblas::Point const& p)
-{
-    std::vector<liblas::FilterPtr>::const_iterator fi;
-    
+{    
     // If there's no filters on this reader, we keep 
     // the point no matter what.
     if (m_filters.empty() ) {
         return true;
     }
 
-    for (fi = m_filters.begin(); fi != m_filters.end(); ++fi) {
+    std::vector<liblas::FilterPtr>::const_iterator fi;
+    for (fi = m_filters.begin(); fi != m_filters.end(); ++fi)
+    {
         liblas::FilterPtr filter = *fi;
-        if (!filter->filter(p)){
+        if (!filter->filter(p))
+        {
             return false;
         }
     }
@@ -174,72 +166,87 @@
 }
 
 bool Reader::ReadNextPoint()
-{
-    std::vector<liblas::TransformPtr>::const_iterator ti;
-  
-    try {
+{  
+    try
+    {
         // m_point = m_pimpl->ReadNextPoint(m_header).get();
         m_point = const_cast<Point*>(&(m_pimpl->ReadNextPoint(m_header)));
-        
+
         // Filter the points and continue reading until we either find 
         // one to keep or throw an exception.
-        if (!KeepPoint(*m_point)) {
+        if (!KeepPoint(*m_point))
+        {
             m_point = const_cast<Point*>(&(m_pimpl->ReadNextPoint(m_header)));
-            while (!KeepPoint(*m_point)) {
+            while (!KeepPoint(*m_point))
+            {
                 m_point = const_cast<Point*>(&(m_pimpl->ReadNextPoint(m_header)));
             }
         }
         
-        if (!m_transforms.empty()) {
+        if (!m_transforms.empty())
+        {
             // Apply the transforms to each point
+            std::vector<liblas::TransformPtr>::const_iterator ti;
 
-            for (ti = m_transforms.begin(); ti != m_transforms.end(); ++ti) {
+            for (ti = m_transforms.begin(); ti != m_transforms.end(); ++ti)
+            {
                 liblas::TransformPtr transform = *ti;
                 transform->transform(*m_point);
             }            
         }
 
         return true;
-    } catch (std::out_of_range) {
+    }
+    catch (std::out_of_range)
+    {
         m_point = 0;
-        return false;
     }
+
+    return false;
 }
 
 bool Reader::ReadPointAt(std::size_t n)
 {
-    std::vector<liblas::TransformPtr>::const_iterator ti;
-
     if (m_header->GetPointRecordsCount() <= n)
     {
         throw std::out_of_range("point subscript out of range");
     }
     
-    try {
+    try
+    {
         m_point = const_cast<Point*>(&(m_pimpl->ReadPointAt(n, m_header)));
-        if (!m_transforms.empty()) {
-            for (ti = m_transforms.begin(); ti != m_transforms.end(); ++ti) {
+        if (!m_transforms.empty())
+        {
+            std::vector<liblas::TransformPtr>::const_iterator ti;
+            for (ti = m_transforms.begin(); ti != m_transforms.end(); ++ti)
+            {
                 liblas::TransformPtr transform = *ti;
                 transform->transform(*m_point);
             }            
-            }
+        }
         return true;
-    } catch (std::out_of_range) {
+    }
+    catch (std::out_of_range)
+    {
         m_point = 0;
-        return false;
     }
+    return false;
 }
 
 bool Reader::seek(std::size_t n)
 {
-    try {
+    try
+    {
+        assert(n < m_header->GetPointRecordsCount());
+


More information about the Liblas-commits mailing list