json: remove path based parsers
parsers don't store copies of the data, so we can't allow functions that allocate data themselves.
This commit is contained in:
parent
bf5cab6156
commit
d7204d7cac
@ -177,7 +177,10 @@ MAP(
|
|||||||
|
|
||||||
std::string::iterator,
|
std::string::iterator,
|
||||||
std::string::const_iterator,
|
std::string::const_iterator,
|
||||||
const char*restrict
|
const char* restrict,
|
||||||
|
const char*,
|
||||||
|
char *restrict,
|
||||||
|
char *
|
||||||
)
|
)
|
||||||
|
|
||||||
#undef INSTANTIATE
|
#undef INSTANTIATE
|
||||||
|
@ -20,10 +20,11 @@
|
|||||||
#include "./except.hpp"
|
#include "./except.hpp"
|
||||||
#include "./flat.hpp"
|
#include "./flat.hpp"
|
||||||
|
|
||||||
|
#include "../cast.hpp"
|
||||||
#include "../debug.hpp"
|
#include "../debug.hpp"
|
||||||
#include "../io.hpp"
|
#include "../io.hpp"
|
||||||
#include "../maths.hpp"
|
#include "../maths.hpp"
|
||||||
#include "../cast.hpp"
|
#include "../preprocessor.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
@ -213,29 +214,6 @@ parse (typename std::vector<json::flat::item<T>>::const_iterator first,
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
std::unique_ptr<json::tree::node>
|
|
||||||
json::tree::parse (const boost::filesystem::path &path)
|
|
||||||
{
|
|
||||||
const util::mapped_file f (path.string ().c_str ());
|
|
||||||
return parse<const char*restrict> (f.operator util::view<const char*restrict> ());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
std::unique_ptr<json::tree::node>
|
|
||||||
json::tree::parse (const std::string &data)
|
|
||||||
{
|
|
||||||
return parse<std::string::const_iterator> (::util::make_view (data));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
void
|
|
||||||
json::tree::write (const json::tree::node &node, std::ostream &os)
|
|
||||||
{ node.write (os); }
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::unique_ptr<json::tree::node>
|
std::unique_ptr<json::tree::node>
|
||||||
json::tree::parse (const util::view<T> src)
|
json::tree::parse (const util::view<T> src)
|
||||||
@ -250,22 +228,33 @@ json::tree::parse (const util::view<T> src)
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define INSTANTIATE(KLASS) \
|
||||||
|
template \
|
||||||
|
std::unique_ptr<json::tree::node> \
|
||||||
|
json::tree::parse (util::view<KLASS>);
|
||||||
|
|
||||||
|
MAP(
|
||||||
|
INSTANTIATE,
|
||||||
|
|
||||||
|
std::string::iterator,
|
||||||
|
std::string::const_iterator,
|
||||||
|
const char* restrict,
|
||||||
|
const char*,
|
||||||
|
char* restrict,
|
||||||
|
char *
|
||||||
|
);
|
||||||
|
|
||||||
|
#undef INSTANTIATE
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
std::unique_ptr<json::tree::node>
|
void
|
||||||
json::tree::from_path (const char *path)
|
json::tree::write (const json::tree::node &node, std::ostream &os)
|
||||||
{
|
{
|
||||||
return json::tree::parse (boost::filesystem::path (path));
|
node.write (os);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
std::unique_ptr<json::tree::node>
|
|
||||||
json::tree::from_path (const std::string &path)
|
|
||||||
{
|
|
||||||
return json::tree::from_path (path.c_str ());
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Type conversion
|
// Type conversion
|
||||||
|
|
||||||
|
@ -23,8 +23,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
|
||||||
|
|
||||||
#include "../iterator.hpp"
|
#include "../iterator.hpp"
|
||||||
#include "../view.hpp"
|
#include "../view.hpp"
|
||||||
#include "./flat.hpp"
|
#include "./flat.hpp"
|
||||||
@ -41,16 +39,10 @@ namespace json { namespace tree {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// Parse an encoded form of JSON into a tree structure
|
/// Parse an encoded form of JSON into a tree structure
|
||||||
extern std::unique_ptr<node> parse (const boost::filesystem::path &path);
|
|
||||||
extern std::unique_ptr<node> parse (const std::string &data);
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::unique_ptr<node>
|
std::unique_ptr<node>
|
||||||
parse (util::view<T> data);
|
parse (util::view<T> data);
|
||||||
|
|
||||||
extern std::unique_ptr<node> from_path (const char *path);
|
|
||||||
extern std::unique_ptr<node> from_path (const std::string&);
|
|
||||||
|
|
||||||
extern void write (const json::tree::node&, std::ostream&);
|
extern void write (const json::tree::node&, std::ostream&);
|
||||||
|
|
||||||
/// Abstract base for all JSON values
|
/// Abstract base for all JSON values
|
||||||
|
Loading…
Reference in New Issue
Block a user