io: move view conversion operator to named function
This commit is contained in:
parent
fef1dc8300
commit
bf5cab6156
11
io_posix.hpp
11
io_posix.hpp
@ -21,6 +21,8 @@
|
|||||||
|
|
||||||
#include "view.hpp"
|
#include "view.hpp"
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
@ -50,8 +52,13 @@ namespace util {
|
|||||||
const uint8_t* cbegin (void) const &;
|
const uint8_t* cbegin (void) const &;
|
||||||
const uint8_t* cend (void) const &;
|
const uint8_t* cend (void) const &;
|
||||||
|
|
||||||
template <typename T> operator util::view<const T *restrict> () const &;
|
template <typename T>
|
||||||
template <typename T> operator util::view< T *restrict> () &;
|
util::view<std::add_const_t<T>*>
|
||||||
|
as_view () const &;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
util::view<T*>
|
||||||
|
as_view () &;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
fd m_fd;
|
fd m_fd;
|
||||||
|
16
io_posix.ipp
16
io_posix.ipp
@ -20,24 +20,28 @@
|
|||||||
|
|
||||||
#define __UTIL_IO_POSIX_IPP
|
#define __UTIL_IO_POSIX_IPP
|
||||||
|
|
||||||
|
#include "./pointer.hpp"
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
template <typename T>
|
template <typename T>
|
||||||
util::detail::posix::mapped_file::operator util::view<const T *restrict> () const &
|
util::view<std::add_const_t<T>*>
|
||||||
|
util::detail::posix::mapped_file::as_view (void) const&
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
reinterpret_cast<const T*restrict> (cbegin ()),
|
reinterpret_cast<const T*> (cbegin ()),
|
||||||
reinterpret_cast<const T*restrict> (cend ())
|
reinterpret_cast<const T*> (align (cend (), alignof (T)))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
template <typename T>
|
template <typename T>
|
||||||
util::detail::posix::mapped_file::operator util::view<T *restrict> () &
|
util::view<T*>
|
||||||
|
util::detail::posix::mapped_file::as_view (void) &
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
reinterpret_cast<T* restrict> (begin ()),
|
reinterpret_cast<T *> (begin ()),
|
||||||
reinterpret_cast<T* restrict> (end ())
|
reinterpret_cast<T *> (align (end (), alignof(T)))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,13 @@ namespace util {
|
|||||||
const uint8_t* cbegin (void) const &;
|
const uint8_t* cbegin (void) const &;
|
||||||
const uint8_t* cend (void) const &;
|
const uint8_t* cend (void) const &;
|
||||||
|
|
||||||
template <typename T> operator util::view<const T *restrict> () const &;
|
template <typename T>
|
||||||
template <typename T> operator util::view< T *restrict> () &;
|
util::view<std::add_const_t<T>*>
|
||||||
|
as_view () const &;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
util::view<T*>
|
||||||
|
as_view () &;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
::util::win32::handle m_file;
|
::util::win32::handle m_file;
|
||||||
|
16
io_win32.ipp
16
io_win32.ipp
@ -21,24 +21,28 @@
|
|||||||
|
|
||||||
#define __UTIL_IO_WIN32_IPP
|
#define __UTIL_IO_WIN32_IPP
|
||||||
|
|
||||||
|
#include "pointer.hpp"
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
template <typename T>
|
template <typename T>
|
||||||
util::detail::win32::mapped_file::operator util::view<const T *restrict> () const &
|
util::view<std::add_const_t<T>*>
|
||||||
|
util::detail::win32::mapped_file::as_view (void) const&
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
reinterpret_cast<const T*restrict> (cbegin ()),
|
reinterpret_cast<const T*> (cbegin ()),
|
||||||
reinterpret_cast<const T*restrict> (cend ())
|
reinterpret_cast<const T*> (align (cend (), alignof (T)))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
template <typename T>
|
template <typename T>
|
||||||
util::detail::win32::mapped_file::operator util::view<T *restrict> () &
|
util::view<T*>
|
||||||
|
util::detail::win32::mapped_file::as_view (void) &
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
reinterpret_cast<T* restrict> (begin ()),
|
reinterpret_cast<T *> (begin ()),
|
||||||
reinterpret_cast<T* restrict> (end ())
|
reinterpret_cast<T *> (align (end (), alignof(T)))
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,10 @@
|
|||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*
|
*
|
||||||
* Copyright 2012 Danny Robson <danny@nerdcruft.net>
|
* Copyright 2012-2016 Danny Robson <danny@nerdcruft.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "io.hpp"
|
||||||
#include "json/except.hpp"
|
#include "json/except.hpp"
|
||||||
#include "json/tree.hpp"
|
#include "json/tree.hpp"
|
||||||
|
|
||||||
@ -22,6 +23,8 @@
|
|||||||
|
|
||||||
#include <boost/filesystem/path.hpp>
|
#include <boost/filesystem/path.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
enum {
|
enum {
|
||||||
ARG_COMMAND,
|
ARG_COMMAND,
|
||||||
ARG_INPUT,
|
ARG_INPUT,
|
||||||
@ -30,23 +33,27 @@ enum {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
void
|
void
|
||||||
print_usage (int argc, char **argv) {
|
print_usage (int argc, char **argv)
|
||||||
|
{
|
||||||
(void)argc;
|
(void)argc;
|
||||||
std::cerr << "usage: " << argv[0] << " <input>\n";
|
std::cerr << "usage: " << argv[0] << " <input>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
int
|
int
|
||||||
main (int argc, char **argv) {
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
if (argc != NUM_ARGS) {
|
if (argc != NUM_ARGS) {
|
||||||
print_usage (argc, argv);
|
print_usage (argc, argv);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
boost::filesystem::path input (argv[ARG_INPUT]);
|
const util::mapped_file src (argv[ARG_INPUT]);
|
||||||
std::cout << *json::tree::parse (input) << "\n";
|
std::cout << *json::tree::parse (src.as_view<const char> ()) << '\n';
|
||||||
} catch (const json::error& err) {
|
} catch (const json::error& err) {
|
||||||
std::cerr << err.what () << "\n";
|
std::cerr << err.what () << "\n";
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#include "json/schema.hpp"
|
#include "json/schema.hpp"
|
||||||
#include "json/except.hpp"
|
#include "json/except.hpp"
|
||||||
|
|
||||||
|
#include "io.hpp"
|
||||||
|
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
namespace fs = boost::filesystem;
|
namespace fs = boost::filesystem;
|
||||||
@ -41,8 +43,11 @@ main (int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto schema = json::tree::parse (fs::path (argv[ARG_SCHEMA]));
|
const util::mapped_file schema_src (argv[ARG_SCHEMA]);
|
||||||
auto input = json::tree::parse (fs::path (argv[ARG_INPUT]));
|
const util::mapped_file input_src (argv[ARG_INPUT]);
|
||||||
|
|
||||||
|
auto schema = json::tree::parse (schema_src.as_view<const char> ());
|
||||||
|
auto input = json::tree::parse (input_src.as_view<const char> ());
|
||||||
|
|
||||||
json::schema::validate (*input, schema->as_object ());
|
json::schema::validate (*input, schema->as_object ());
|
||||||
} catch (const json::error &e) {
|
} catch (const json::error &e) {
|
||||||
|
@ -42,8 +42,8 @@ main (int argc, char ** argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
util::mapped_file data (argv[ARG_PATH]);
|
const util::mapped_file data (argv[ARG_PATH]);
|
||||||
json::flat::parse (data.operator util::view<const char*restrict> ());
|
json::flat::parse (data.as_view<const char> ());
|
||||||
} catch (const json::error &x) {
|
} catch (const json::error &x) {
|
||||||
std::cerr << "error: " << x.what () << '\n';
|
std::cerr << "error: " << x.what () << '\n';
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
Loading…
Reference in New Issue
Block a user