[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