Skip to content

Commit

Permalink
move name-based lookup into DimId class
Browse files Browse the repository at this point in the history
  • Loading branch information
mpgerlek committed Sep 29, 2011
1 parent 8165711 commit 5c93447
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 87 deletions.
2 changes: 2 additions & 0 deletions include/pdal/DimensionId.hpp
Expand Up @@ -127,6 +127,8 @@ class PDAL_DLL DimensionId
Undefined = 200000
};

public:
static Id getIdFromName(std::string const& name);
};


Expand Down
1 change: 0 additions & 1 deletion include/pdal/XMLSchema.hpp
Expand Up @@ -141,7 +141,6 @@ class PDAL_DLL Reader
void Initialize();
void Load();
Dimension::DataType GetDimensionType(std::string const& interpretation);
DimensionId::Id GetDimensionField(std::string const& name, boost::uint32_t position);

private:

Expand Down
21 changes: 13 additions & 8 deletions src/Dimension.cpp
Expand Up @@ -363,14 +363,19 @@ static bool hasKnownDimension(const DimensionId::Id& id)

static void validate()
{
std::map<DimensionId::Id, int> map;

int i=0;
while (s_knownDimensions[i].id != DimensionId::Undefined)
{
assert(map.find(s_knownDimensions[i].id) == map.end());
map.insert(std::pair<DimensionId::Id,int>(s_knownDimensions[i].id,1) );
++i;
static std::map<DimensionId::Id, int> map;

// only do this once
if (map.size() == 0)
{
int i=0;
while (s_knownDimensions[i].id != DimensionId::Undefined)
{
assert(map.find(s_knownDimensions[i].id) == map.end());
std::pair<DimensionId::Id,int> pair(s_knownDimensions[i].id,i);
map.insert(pair);
++i;
}
}
}

Expand Down
80 changes: 79 additions & 1 deletion src/DimensionId.cpp
Expand Up @@ -33,10 +33,88 @@
****************************************************************************/

#include <pdal/DimensionId.hpp>
#include <pdal/Utils.hpp>

namespace pdal
{

// no code yet

DimensionId::Id DimensionId::getIdFromName(std::string const& name)
{
// BUG: should we be checking for the Double datatype version of X,Y,Z too?
if (!Utils::compare_no_case(name, "X"))
return DimensionId::X_i32;

if (!Utils::compare_no_case(name, "Y"))
return DimensionId::Y_i32;

if (!Utils::compare_no_case(name, "Z"))
return DimensionId::Z_i32;

if (!Utils::compare_no_case(name, "Intensity"))
return DimensionId::Las_Intensity;

if (!Utils::compare_no_case(name, "Return Number") ||
!Utils::compare_no_case(name, "ReturnNumber"))
return DimensionId::Las_ReturnNumber;

if (!Utils::compare_no_case(name, "Number of Returns") ||
!Utils::compare_no_case(name, "NumberOfReturns"))
return DimensionId::Las_NumberOfReturns;

if (!Utils::compare_no_case(name, "Number of Returns"))
return DimensionId::Las_NumberOfReturns;

if (!Utils::compare_no_case(name, "Scan Direction") ||
!Utils::compare_no_case(name, "ScanDirectionFlag") ||
!Utils::compare_no_case(name, "ScanDirection"))
return DimensionId::Las_ScanDirectionFlag;

if (!Utils::compare_no_case(name, "Flightline Edge") ||
!Utils::compare_no_case(name, "EdgeOfFlightLine") ||
!Utils::compare_no_case(name, "FlightlineEdge"))
return DimensionId::Las_EdgeOfFlightLine;

if (!Utils::compare_no_case(name, "Classification"))
return DimensionId::Las_Classification;

if (!Utils::compare_no_case(name, "Scan Angle Rank") ||
!Utils::compare_no_case(name, "ScanAngle") ||
!Utils::compare_no_case(name, "ScanAngleRank"))
return DimensionId::Las_ScanAngleRank;

if (!Utils::compare_no_case(name, "User Data") ||
!Utils::compare_no_case(name, "UserData"))
return DimensionId::Las_UserData;

if (!Utils::compare_no_case(name, "Point Source ID")||
!Utils::compare_no_case(name, "PointSourceId"))
return DimensionId::Las_PointSourceId;

if (!Utils::compare_no_case(name, "Time"))
return DimensionId::Las_Time;

if (!Utils::compare_no_case(name, "Red"))
return DimensionId::Red_u16;

if (!Utils::compare_no_case(name, "Green"))
return DimensionId::Green_u16;

if (!Utils::compare_no_case(name, "Blue"))
return DimensionId::Blue_u16;

if (!Utils::compare_no_case(name, "Alpha"))
return DimensionId::TerraSolid_Alpha;

if (!Utils::compare_no_case(name, "Chipper Point ID"))
return DimensionId::Chipper_1;

if (!Utils::compare_no_case(name, "Chipper Block ID"))
return DimensionId::Chipper_2;

// Yes, this is scary. What else can we do?
throw pdal_error("unknown field name: " + name);
}


} // namespace pdal
78 changes: 1 addition & 77 deletions src/XMLSchema.cpp
Expand Up @@ -521,7 +521,7 @@ void Reader::Load()
properties = properties->next;
}

DimensionId::Id f = GetDimensionField(name, position);
DimensionId::Id f = DimensionId::getIdFromName(name);

Dimension d(f);
if (! Utils::compare_distance(scale, 0.0))
Expand Down Expand Up @@ -610,82 +610,6 @@ Dimension::DataType Reader::GetDimensionType(std::string const& interpretation)
return Dimension::Undefined;
}

DimensionId::Id Reader::GetDimensionField(std::string const& name, boost::uint32_t /*position*/)
{
// BUG: should we be checking for the Double datatype version of X,Y,Z too?
if (!Utils::compare_no_case(name, "X"))
return DimensionId::X_i32;

if (!Utils::compare_no_case(name, "Y"))
return DimensionId::Y_i32;

if (!Utils::compare_no_case(name, "Z"))
return DimensionId::Z_i32;

if (!Utils::compare_no_case(name, "Intensity"))
return DimensionId::Las_Intensity;

if (!Utils::compare_no_case(name, "Return Number") ||
!Utils::compare_no_case(name, "ReturnNumber"))
return DimensionId::Las_ReturnNumber;

if (!Utils::compare_no_case(name, "Number of Returns") ||
!Utils::compare_no_case(name, "NumberOfReturns"))
return DimensionId::Las_NumberOfReturns;

if (!Utils::compare_no_case(name, "Number of Returns"))
return DimensionId::Las_NumberOfReturns;

if (!Utils::compare_no_case(name, "Scan Direction") ||
!Utils::compare_no_case(name, "ScanDirectionFlag") ||
!Utils::compare_no_case(name, "ScanDirection"))
return DimensionId::Las_ScanDirectionFlag;

if (!Utils::compare_no_case(name, "Flightline Edge") ||
!Utils::compare_no_case(name, "EdgeOfFlightLine") ||
!Utils::compare_no_case(name, "FlightlineEdge"))
return DimensionId::Las_EdgeOfFlightLine;

if (!Utils::compare_no_case(name, "Classification"))
return DimensionId::Las_Classification;

if (!Utils::compare_no_case(name, "Scan Angle Rank") ||
!Utils::compare_no_case(name, "ScanAngle") ||
!Utils::compare_no_case(name, "ScanAngleRank"))
return DimensionId::Las_ScanAngleRank;

if (!Utils::compare_no_case(name, "User Data") ||
!Utils::compare_no_case(name, "UserData"))
return DimensionId::Las_UserData;

if (!Utils::compare_no_case(name, "Point Source ID")||
!Utils::compare_no_case(name, "PointSourceId"))
return DimensionId::Las_PointSourceId;

if (!Utils::compare_no_case(name, "Time"))
return DimensionId::Las_Time;

if (!Utils::compare_no_case(name, "Red"))
return DimensionId::Red_u16;

if (!Utils::compare_no_case(name, "Green"))
return DimensionId::Green_u16;

if (!Utils::compare_no_case(name, "Blue"))
return DimensionId::Blue_u16;

if (!Utils::compare_no_case(name, "Alpha"))
return DimensionId::TerraSolid_Alpha;

if (!Utils::compare_no_case(name, "Chipper Point ID"))
return DimensionId::Chipper_1;

if (!Utils::compare_no_case(name, "Chipper Block ID"))
return DimensionId::Chipper_2;

// Yes, this is scary. What else can we do?
throw pdal_error("unknown field name: " + name);
}

Writer::Writer(pdal::Schema const& schema)
: m_schema(schema) {}
Expand Down

0 comments on commit 5c93447

Please sign in to comment.