[Liblas-commits] laszip: fixed for chunked compression of 0 points

liblas-commits at liblas.org liblas-commits at liblas.org
Tue Jun 28 11:08:59 EDT 2011


details:   http://hg.liblas.orglaszip/rev/379b1fd606a6
changeset: 263:379b1fd606a6
user:      isenburg
date:      Tue Jun 28 08:12:29 2011 -0700
description:
fixed for chunked compression of 0 points

diffstat:

 src/lasreadpoint.cpp  |  33 ++++++++++++++++-----------------
 src/laswritepoint.cpp |  25 ++++++++++++++++++-------
 2 files changed, 34 insertions(+), 24 deletions(-)

diffs (95 lines):

diff -r 8326e4c5f9ef -r 379b1fd606a6 src/lasreadpoint.cpp
--- a/src/lasreadpoint.cpp	Mon Jun 27 14:39:15 2011 -0500
+++ b/src/lasreadpoint.cpp	Tue Jun 28 08:12:29 2011 -0700
@@ -385,10 +385,6 @@
   {
     return FALSE;
   }
-  if (number_chunks == 0)
-  {
-    return FALSE;
-  }
   if (chunk_totals) delete [] chunk_totals;
   chunk_totals = 0;
   if (chunk_starts) delete [] chunk_starts;
@@ -397,20 +393,23 @@
   chunk_starts = new long[number_chunks+1];
   if (chunk_size == U32_MAX) chunk_totals[0] = 0;
   chunk_starts[0] = chunks_start;
-  U32 i;
-  dec->init(instream);
-  IntegerCompressor ic(dec, 32, 2);
-  ic.initDecompressor();
-  for (i = 1; i <= number_chunks; i++)
+  if (number_chunks > 0)
   {
-    if (chunk_size == U32_MAX) chunk_totals[i] = ic.decompress((i>1 ? chunk_totals[i-1] : 0), 0);
-    chunk_starts[i] = ic.decompress((i>1 ? chunk_starts[i-1] : 0), 1);
-  }
-  dec->done();
-  for (i = 1; i <= number_chunks; i++)
-  {
-    if (chunk_size == U32_MAX) chunk_totals[i] += chunk_totals[i-1];
-    chunk_starts[i] += chunk_starts[i-1];
+    U32 i;
+    dec->init(instream);
+    IntegerCompressor ic(dec, 32, 2);
+    ic.initDecompressor();
+    for (i = 1; i <= number_chunks; i++)
+    {
+      if (chunk_size == U32_MAX) chunk_totals[i] = ic.decompress((i>1 ? chunk_totals[i-1] : 0), 0);
+      chunk_starts[i] = ic.decompress((i>1 ? chunk_starts[i-1] : 0), 1);
+    }
+    dec->done();
+    for (i = 1; i <= number_chunks; i++)
+    {
+      if (chunk_size == U32_MAX) chunk_totals[i] += chunk_totals[i-1];
+      chunk_starts[i] += chunk_starts[i-1];
+    }
   }
   instream->seek(chunks_start);
   return TRUE;
diff -r 8326e4c5f9ef -r 379b1fd606a6 src/laswritepoint.cpp
--- a/src/laswritepoint.cpp	Mon Jun 27 14:39:15 2011 -0500
+++ b/src/laswritepoint.cpp	Tue Jun 28 08:12:29 2011 -0700
@@ -285,6 +285,14 @@
       return write_chunk_table();
     }
   }
+  else if (writers == 0)
+  {
+    if (chunk_start_position)
+    {
+      return write_chunk_table();
+    }
+  }
+
   return TRUE;
 }
 
@@ -343,15 +351,18 @@
   {
     return FALSE;
   }
-  enc->init(outstream);
-  IntegerCompressor ic(enc, 32, 2);
-  ic.initCompressor();
-  for (i = 0; i < number_chunks; i++)
+  if (number_chunks > 0)
   {
-    if (chunk_size == U32_MAX) ic.compress((i ? chunk_sizes[i-1] : 0), chunk_sizes[i], 0);
-    ic.compress((i ? chunk_bytes[i-1] : 0), chunk_bytes[i], 1);
+    enc->init(outstream);
+    IntegerCompressor ic(enc, 32, 2);
+    ic.initCompressor();
+    for (i = 0; i < number_chunks; i++)
+    {
+      if (chunk_size == U32_MAX) ic.compress((i ? chunk_sizes[i-1] : 0), chunk_sizes[i], 0);
+      ic.compress((i ? chunk_bytes[i-1] : 0), chunk_bytes[i], 1);
+    }
+    enc->done();
   }
-  enc->done();
   if (!chunk_table_start_position) // stream is not-seekable
   {
     if (!outstream->put64bitsLE((U8*)&position))


More information about the Liblas-commits mailing list