Skip to content

Commit bacaa74

Browse files
authored
Remove JSON from tindex reader header (PDAL#4724)
* Remove private functions from stac reader header. * Move interface functions out of EsriReader. * Make writeHierarchy a non-member. * Add missed file. * Move functions/data to Private. * Remove handleReaderArgs() and setReaderOptions() from header.
1 parent e08c580 commit bacaa74

File tree

2 files changed

+85
-94
lines changed

2 files changed

+85
-94
lines changed

io/TIndexReader.cpp

Lines changed: 84 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,90 @@ struct TIndexReader::Args
7979
NL::json m_readerArgs;
8080
};
8181

82+
namespace
83+
{
84+
85+
NL::json handleReaderArgs(NL::json rawReaderArgs)
86+
{
87+
if (rawReaderArgs.is_object())
88+
{
89+
NL::json array_args = NL::json::array();
90+
array_args.push_back(rawReaderArgs);
91+
rawReaderArgs = array_args;
92+
}
93+
for (auto& opts: rawReaderArgs)
94+
if (!opts.is_object())
95+
throw pdal_error("Reader Args for each reader must be a valid JSON object");
96+
97+
NL::json readerArgs;
98+
for (NL::json& readerPipeline: rawReaderArgs)
99+
{
100+
101+
if (!readerPipeline.contains("type"))
102+
throw pdal_error("No \"type\" key found in supplied reader arguments.");
103+
104+
std::string driver = readerPipeline.at("type").get<std::string>();
105+
if (rawReaderArgs.contains(driver))
106+
throw pdal_error("Multiple instances of the same driver in supplied reader arguments.");
107+
readerArgs[driver] = { };
108+
109+
for (auto& arg: readerPipeline.items())
110+
{
111+
if (arg.key() == "type")
112+
continue;
113+
114+
std::string key = arg.key();
115+
readerArgs[driver][key] = { };
116+
readerArgs[driver][key] = arg.value();
117+
}
118+
}
119+
return readerArgs;
120+
}
121+
122+
Options setReaderOptions(const NL::json& readerArgs, const std::string& driver)
123+
{
124+
Options readerOptions;
125+
if (readerArgs.contains(driver)) {
126+
NL::json args = readerArgs.at(driver).get<NL::json>();
127+
for (auto& arg : args.items()) {
128+
NL::detail::value_t type = readerArgs.at(driver).at(arg.key()).type();
129+
switch(type)
130+
{
131+
case NL::detail::value_t::string:
132+
{
133+
std::string val = arg.value().get<std::string>();
134+
readerOptions.add(arg.key(), arg.value().get<std::string>());
135+
break;
136+
}
137+
case NL::detail::value_t::number_float:
138+
{
139+
readerOptions.add(arg.key(), arg.value().get<float>());
140+
break;
141+
}
142+
case NL::detail::value_t::number_integer:
143+
{
144+
readerOptions.add(arg.key(), arg.value().get<int>());
145+
break;
146+
}
147+
case NL::detail::value_t::boolean:
148+
{
149+
readerOptions.add(arg.key(), arg.value().get<bool>());
150+
break;
151+
}
152+
default:
153+
{
154+
readerOptions.add(arg.key(), arg.value());
155+
break;
156+
}
157+
}
158+
}
159+
}
160+
161+
return readerOptions;
162+
}
163+
164+
} // unnamed namespace
165+
82166
TIndexReader::TIndexReader() :
83167
m_args(new TIndexReader::Args),
84168
m_dataset(nullptr),
@@ -354,97 +438,10 @@ void TIndexReader::ready(PointTableRef table)
354438
StageWrapper::ready(m_merge, table);
355439
}
356440

357-
358441
PointViewSet TIndexReader::run(PointViewPtr view)
359442
{
360443
return StageWrapper::run(m_merge, view);
361444
}
362445

363-
NL::json TIndexReader::handleReaderArgs(NL::json rawReaderArgs)
364-
{
365-
366-
if (rawReaderArgs.is_object())
367-
{
368-
NL::json array_args = NL::json::array();
369-
array_args.push_back(rawReaderArgs);
370-
rawReaderArgs = array_args;
371-
}
372-
for (auto& opts: rawReaderArgs)
373-
if (!opts.is_object())
374-
throw pdal_error("Reader Args for each reader must be a valid JSON object");
375-
376-
NL::json readerArgs;
377-
for (NL::json& readerPipeline: rawReaderArgs)
378-
{
379-
380-
if (!readerPipeline.contains("type"))
381-
throw pdal_error("No \"type\" key found in supplied reader arguments.");
382-
383-
std::string driver = readerPipeline.at("type").get<std::string>();
384-
log()->get(LogLevel::Debug2) << "Gathering reader_args for reader of type " << driver << std::endl;
385-
if (rawReaderArgs.contains(driver))
386-
throw pdal_error("Multiple instances of the same driver in supplied reader arguments.");
387-
readerArgs[driver] = { };
388-
389-
for (auto& arg: readerPipeline.items())
390-
{
391-
392-
if (arg.key() == "type")
393-
continue;
394-
395-
std::string key = arg.key();
396-
readerArgs[driver][key] = { };
397-
readerArgs[driver][key] = arg.value();
398-
}
399-
}
400-
return readerArgs;
401-
}
402-
403-
404-
Options TIndexReader::setReaderOptions(const NL::json& readerArgs, const std::string& driver) const
405-
{
406-
Options readerOptions;
407-
if (readerArgs.contains(driver)) {
408-
NL::json args = readerArgs.at(driver).get<NL::json>();
409-
for (auto& arg : args.items()) {
410-
NL::detail::value_t type = readerArgs.at(driver).at(arg.key()).type();
411-
switch(type)
412-
{
413-
case NL::detail::value_t::string:
414-
{
415-
std::string val = arg.value().get<std::string>();
416-
readerOptions.add(arg.key(), arg.value().get<std::string>());
417-
break;
418-
}
419-
case NL::detail::value_t::number_float:
420-
{
421-
readerOptions.add(arg.key(), arg.value().get<float>());
422-
break;
423-
}
424-
case NL::detail::value_t::number_integer:
425-
{
426-
readerOptions.add(arg.key(), arg.value().get<int>());
427-
break;
428-
}
429-
case NL::detail::value_t::boolean:
430-
{
431-
readerOptions.add(arg.key(), arg.value().get<bool>());
432-
break;
433-
}
434-
default:
435-
{
436-
readerOptions.add(arg.key(), arg.value());
437-
break;
438-
}
439-
}
440-
}
441-
}
442-
443-
return readerOptions;
444-
}
445-
446-
447-
448-
449446
} // namespace pdal
450447

io/TIndexReader.hpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939
#include <pdal/StageFactory.hpp>
4040
#include <filters/MergeFilter.hpp>
4141

42-
#include <pdal/JsonFwd.hpp>
43-
4442
// Get GDAL's forward decls if available
4543
// otherwise make our own
4644
#if __has_include(<gdal_fwd.h>)
@@ -89,13 +87,9 @@ class PDAL_EXPORT TIndexReader : public Reader, public Streamable
8987
virtual point_count_t read(PointViewPtr view, point_count_t num) override;
9088
virtual bool processOne(PointRef& point) override;
9189

92-
NL::json handleReaderArgs(NL::json rawReaderArgs);
93-
Options setReaderOptions(const NL::json& readerArgs,
94-
const std::string& driver) const;
95-
9690
struct Args;
97-
9891
std::unique_ptr<Args> m_args;
92+
9993
std::unique_ptr<gdal::SpatialRef> m_out_ref;
10094
OGRDataSourceH m_dataset;
10195
OGRLayerH m_layer;

0 commit comments

Comments
 (0)