Commit 52f6fd1d authored by Jonathan Dumaresq's avatar Jonathan Dumaresq

Add the possibility of using FILE * from cstdio library to read a file. This...

Add the possibility of using FILE * from cstdio library to read a file. This enable the possibility of using low eand device with this library.
parent 67b0daf2
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <string> // string, char_traits #include <string> // string, char_traits
#include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer #include <type_traits> // enable_if, is_base_of, is_pointer, is_integral, remove_pointer
#include <utility> // pair, declval #include <utility> // pair, declval
#include <cstdio> //FILE *
#include <nlohmann/detail/macro_scope.hpp> #include <nlohmann/detail/macro_scope.hpp>
...@@ -45,6 +46,27 @@ struct input_adapter_protocol ...@@ -45,6 +46,27 @@ struct input_adapter_protocol
/// a type to simplify interfaces /// a type to simplify interfaces
using input_adapter_t = std::shared_ptr<input_adapter_protocol>; using input_adapter_t = std::shared_ptr<input_adapter_protocol>;
class file_input_adapter : public input_adapter_protocol
{
public:
explicit file_input_adapter(const FILE *file) noexcept
: file(file)
{}
std::char_traits<char>::int_type get_character() noexcept override
{
auto res = fgetc(const_cast<FILE *>(file));
if(res == EOF)
return std::char_traits<char>::eof();
else
return static_cast<std::char_traits<char>::int_type>(res);
}
private:
/// the file pointer to read from
const FILE * file;
};
/*! /*!
Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at
beginning of input. Does not support changing the underlying std::streambuf beginning of input. Does not support changing the underlying std::streambuf
...@@ -287,7 +309,8 @@ class input_adapter ...@@ -287,7 +309,8 @@ class input_adapter
{ {
public: public:
// native support // native support
input_adapter(FILE * file)
: ia(std::make_shared<file_input_adapter>(file)) {}
/// input adapter for input stream /// input adapter for input stream
input_adapter(std::istream& i) input_adapter(std::istream& i)
: ia(std::make_shared<input_stream_adapter>(i)) {} : ia(std::make_shared<input_stream_adapter>(i)) {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment