Skip to content

Commit 218ef8d

Browse files
committed
switch to switch statement as suggested. Provide a multi-endian test scenario
1 parent 1b5a51b commit 218ef8d

File tree

4 files changed

+63
-70
lines changed

4 files changed

+63
-70
lines changed

pdal/io/NumpyReader.cpp

Lines changed: 61 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -552,86 +552,79 @@ bool NumpyReader::loadPoint(PointRef& point, point_count_t position)
552552

553553
float flt(0.0);
554554
double dbl(0.0);
555-
uint8_t uint8(0);
556-
uint16_t uint16(0);
557-
uint32_t uint32(0);
558-
uint64_t uint64(0);
559-
int8_t int8(0);
560-
int16_t int16(0);
561-
int32_t int32(0);
562-
int64_t int64(0);
555+
uint8_t u8(0);
556+
uint16_t u16(0);
557+
uint32_t u32(0);
558+
uint64_t u64(0);
559+
int8_t i8(0);
560+
int16_t i16(0);
561+
int32_t i32(0);
562+
int64_t i64(0);
563563

564564
for (const Field& f : m_fields)
565565
{
566+
log()->get(LogLevel::Debug) << "endian: " << f.m_byteorder << std::endl;
566567
if (f.m_byteorder == '>')
567568
extractor.switchToBigEndian();
568569
else
569570
extractor.switchToLittleEndian();
570571

571-
if (Dimension::base(f.m_type) == Dimension::BaseType::Floating)
572+
switch (f.m_type)
572573
{
573-
if (f.m_elsize == 4)
574-
{
574+
case Dimension::Type::Signed8:
575+
extractor >> i8;
576+
point.setField(f.m_id, i8);
577+
break;
578+
579+
case Dimension::Type::Signed16:
580+
extractor >> i16;
581+
point.setField(f.m_id, i16);
582+
break;
583+
584+
case Dimension::Type::Signed32:
585+
extractor >> i32;
586+
point.setField(f.m_id, i32);
587+
break;
588+
589+
case Dimension::Type::Signed64:
590+
extractor >> i64;
591+
point.setField(f.m_id, i64);
592+
break;
593+
594+
case Dimension::Type::Unsigned8:
595+
extractor >> u8;
596+
point.setField(f.m_id, u8);
597+
break;
598+
599+
case Dimension::Type::Unsigned16:
600+
extractor >> u16;
601+
point.setField(f.m_id, u16);
602+
break;
603+
604+
case Dimension::Type::Unsigned32:
605+
extractor >> u32;
606+
point.setField(f.m_id, u32);
607+
break;
608+
609+
case Dimension::Type::Unsigned64:
610+
extractor >> u64;
611+
point.setField(f.m_id, u64);
612+
break;
613+
614+
case Dimension::Type::Float:
575615
extractor >> flt;
576-
point.setField<float>(f.m_id, flt);
577-
}
578-
else if (f.m_elsize == 8)
579-
{
616+
point.setField(f.m_id, flt);
617+
break;
618+
619+
case Dimension::Type::Double:
580620
extractor >> dbl;
581-
point.setField<double>(f.m_id, dbl);
621+
point.setField(f.m_id, dbl);
622+
break;
623+
624+
default:
625+
// skip it
626+
extractor.skip(f.m_elsize);
582627

583-
}
584-
}
585-
else if (Dimension::base(f.m_type) == Dimension::BaseType::Signed)
586-
{
587-
if (f.m_elsize == 1)
588-
{
589-
extractor >> int8;
590-
point.setField<int8_t>(f.m_id, int8);
591-
}
592-
if (f.m_elsize == 2)
593-
{
594-
extractor >> int16;
595-
point.setField<int16_t>(f.m_id, int16);
596-
}
597-
if (f.m_elsize == 4)
598-
{
599-
extractor >> int32;
600-
point.setField<int32_t>(f.m_id, int32);
601-
}
602-
if (f.m_elsize == 8)
603-
{
604-
extractor >> int64;
605-
point.setField<int64_t>(f.m_id, int64);
606-
}
607-
}
608-
else if (Dimension::base(f.m_type) == Dimension::BaseType::Unsigned)
609-
{
610-
if (f.m_elsize == 1)
611-
{
612-
extractor >> uint8;
613-
point.setField<uint8_t>(f.m_id, uint8);
614-
}
615-
if (f.m_elsize == 2)
616-
{
617-
extractor >> uint16;
618-
point.setField<uint16_t>(f.m_id, uint16);
619-
}
620-
if (f.m_elsize == 4)
621-
{
622-
extractor >> uint32;
623-
point.setField<uint32_t>(f.m_id, uint32);
624-
}
625-
if (f.m_elsize == 8)
626-
{
627-
extractor >> int64;
628-
point.setField<uint64_t>(f.m_id, uint64);
629-
}
630-
}
631-
else
632-
{
633-
// skip it
634-
extractor.skip(f.m_elsize);
635628
}
636629

637630
}

pdal/test/NumpyReaderTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ TEST(NumpyReaderTest, NumpyReaderTest_read_array)
9191
EXPECT_EQ(view->layout()->pointSize(), 24u);
9292

9393
EXPECT_EQ(view->getFieldAs<double>(pdal::Dimension::Id::Intensity,5000),
94-
0.0);
94+
0.5);
9595
EXPECT_EQ(view->getFieldAs<uint32_t>(pdal::Dimension::Id::X,5000), 50u);
9696
EXPECT_EQ(view->getFieldAs<uint32_t>(pdal::Dimension::Id::X,5023), 50u);
9797
EXPECT_EQ(view->getFieldAs<uint32_t>(pdal::Dimension::Id::Y,5023), 23u);

pdal/test/data/four-floats-be.bin

0 Bytes
Binary file not shown.

pdal/test/data/four-floats.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import numpy as np
22

33

4-
dtype = np.dtype([('X', '>f4'), ('Y', '>f4'), ('Z', '>f4'), ('GPSTime', '>f4')])
4+
dtype = np.dtype([('X', '>f4'), ('Y', '>f4'), ('Z', '<f4'), ('GPSTime', '>f4')])
55

66
def load(filename):
77
data = open(filename, 'rb').read()

0 commit comments

Comments
 (0)