mirror of
https://github.com/rbock/sqlpp11.git
synced 2024-11-16 12:51:13 +08:00
Move index_sequence into compat/utility.h
This commit is contained in:
parent
1339cbd0e6
commit
892583582b
@ -106,7 +106,7 @@ namespace sqlpp
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
template <size_t... Indexes>
|
template <size_t... Indexes>
|
||||||
auto columns_from_tuple(detail::index_sequence<Indexes...>, std::tuple<Assignments...> assignments)
|
auto columns_from_tuple(::sqlpp::index_sequence<Indexes...>, std::tuple<Assignments...> assignments)
|
||||||
-> decltype(_columns)
|
-> decltype(_columns)
|
||||||
{
|
{
|
||||||
(void)assignments;
|
(void)assignments;
|
||||||
@ -115,12 +115,12 @@ namespace sqlpp
|
|||||||
|
|
||||||
auto columns_from_tuple(std::tuple<Assignments...> assignments) -> decltype(_columns)
|
auto columns_from_tuple(std::tuple<Assignments...> assignments) -> decltype(_columns)
|
||||||
{
|
{
|
||||||
const auto seq = detail::make_index_sequence<sizeof...(Assignments)>{};
|
const auto seq = ::sqlpp::make_index_sequence<sizeof...(Assignments)>{};
|
||||||
return columns_from_tuple(seq, assignments);
|
return columns_from_tuple(seq, assignments);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <size_t... Indexes>
|
template <size_t... Indexes>
|
||||||
auto values_from_tuple(detail::index_sequence<Indexes...>, std::tuple<Assignments...> assignments)
|
auto values_from_tuple(::sqlpp::index_sequence<Indexes...>, std::tuple<Assignments...> assignments)
|
||||||
-> decltype(_values)
|
-> decltype(_values)
|
||||||
{
|
{
|
||||||
(void)assignments;
|
(void)assignments;
|
||||||
@ -129,7 +129,7 @@ namespace sqlpp
|
|||||||
|
|
||||||
auto values_from_tuple(std::tuple<Assignments...> assignments) -> decltype(_values)
|
auto values_from_tuple(std::tuple<Assignments...> assignments) -> decltype(_values)
|
||||||
{
|
{
|
||||||
const auto seq = detail::make_index_sequence<sizeof...(Assignments)>{};
|
const auto seq = ::sqlpp::make_index_sequence<sizeof...(Assignments)>{};
|
||||||
return values_from_tuple(seq, assignments);
|
return values_from_tuple(seq, assignments);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -62,8 +62,7 @@ namespace sqlpp
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
#warning: Can we make char_traits<char>::length constexpr
|
string_view(const char* data) : _data(data), _size(std::char_traits<char>::length(data))
|
||||||
constexpr string_view(const char* data) : _data(data), _size(std::char_traits<char>::length(data))
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2015, Roland Bock
|
* Copyright (c) 2013, Roland Bock
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -26,16 +26,31 @@
|
|||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <type_traits>
|
#include <utility>
|
||||||
|
|
||||||
|
#ifdef _MSVC_LANG
|
||||||
|
#define CXX_STD_VER _MSVC_LANG
|
||||||
|
#else
|
||||||
|
#define CXX_STD_VER __cplusplus
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if CXX_STD_VER >= 201402L
|
||||||
|
#include <string_view>
|
||||||
|
namespace sqlpp
|
||||||
|
{
|
||||||
|
template <std::size_t... Ints>
|
||||||
|
using index_sequence = std::index_sequence<Ints...>;
|
||||||
|
template <std::size_t N>
|
||||||
|
using make_index_sequence = std::make_index_sequence<N>;
|
||||||
|
|
||||||
|
} // namespace sqlpp
|
||||||
|
|
||||||
|
#else // incomplete backport of utility.h
|
||||||
|
|
||||||
namespace sqlpp
|
namespace sqlpp
|
||||||
{
|
{
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
// Note: This is a minimalistic implementation of index_sequence available in C++14
|
|
||||||
// It should be replaced once the project is moved to C++14 or beyond
|
|
||||||
template <std::size_t... Ints>
|
template <std::size_t... Ints>
|
||||||
struct index_sequence
|
class index_sequence
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -56,5 +71,6 @@ namespace sqlpp
|
|||||||
|
|
||||||
template <std::size_t N>
|
template <std::size_t N>
|
||||||
using make_index_sequence = typename make_index_sequence_impl<index_sequence<>, N>::type;
|
using make_index_sequence = typename make_index_sequence_impl<index_sequence<>, N>::type;
|
||||||
} // namespace detail
|
|
||||||
} // namespace sqlpp
|
} // namespace sqlpp
|
||||||
|
|
||||||
|
#endif
|
@ -30,7 +30,7 @@
|
|||||||
|
|
||||||
#include <sqlpp11/core/type_traits.h>
|
#include <sqlpp11/core/type_traits.h>
|
||||||
#include <sqlpp11/core/wrong.h>
|
#include <sqlpp11/core/wrong.h>
|
||||||
#include <sqlpp11/core/detail/index_sequence.h>
|
#include <sqlpp11/core/compat/utility.h>
|
||||||
#include <sqlpp11/core/detail/type_vector.h>
|
#include <sqlpp11/core/detail/type_vector.h>
|
||||||
|
|
||||||
namespace sqlpp
|
namespace sqlpp
|
||||||
@ -52,12 +52,12 @@ namespace sqlpp
|
|||||||
template <typename Target>
|
template <typename Target>
|
||||||
void _bind(Target& target) const
|
void _bind(Target& target) const
|
||||||
{
|
{
|
||||||
_bind_impl(target, detail::make_index_sequence<size::value>{});
|
_bind_impl(target, ::sqlpp::make_index_sequence<size::value>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename Target, size_t... Is>
|
template <typename Target, size_t... Is>
|
||||||
void _bind_impl(Target& target, const detail::index_sequence<Is...>& /*unused*/) const
|
void _bind_impl(Target& target, const ::sqlpp::index_sequence<Is...>& /*unused*/) const
|
||||||
{
|
{
|
||||||
using swallow = int[]; // see core/interpret_tuple.h
|
using swallow = int[]; // see core/interpret_tuple.h
|
||||||
(void)swallow{0, (std::tuple_element<Is, _member_tuple_t>::type::operator()()._bind(target, Is), 0)...};
|
(void)swallow{0, (std::tuple_element<Is, _member_tuple_t>::type::operator()()._bind(target, Is), 0)...};
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <sqlpp11/core/type_traits.h>
|
#include <sqlpp11/core/type_traits.h>
|
||||||
#include <sqlpp11/core/serialize.h>
|
#include <sqlpp11/core/serialize.h>
|
||||||
#include <sqlpp11/core/detail/index_sequence.h>
|
#include <sqlpp11/core/compat/utility.h>
|
||||||
|
|
||||||
namespace sqlpp
|
namespace sqlpp
|
||||||
{
|
{
|
||||||
@ -56,7 +56,7 @@ namespace sqlpp
|
|||||||
const Separator& separator,
|
const Separator& separator,
|
||||||
Context& context,
|
Context& context,
|
||||||
const UseBraces& useBraces,
|
const UseBraces& useBraces,
|
||||||
const detail::index_sequence<Is...> &
|
const ::sqlpp::index_sequence<Is...> &
|
||||||
/*unused*/) -> Context&
|
/*unused*/) -> Context&
|
||||||
{
|
{
|
||||||
// Note: A braced-init-list does guarantee the order of evaluation according to 12.6.1 [class.explicit.init]
|
// Note: A braced-init-list does guarantee the order of evaluation according to 12.6.1 [class.explicit.init]
|
||||||
@ -75,13 +75,13 @@ namespace sqlpp
|
|||||||
auto interpret_tuple(const Tuple& t, const Separator& separator, Context& context) -> Context&
|
auto interpret_tuple(const Tuple& t, const Separator& separator, Context& context) -> Context&
|
||||||
{
|
{
|
||||||
return interpret_tuple_impl(t, separator, context, std::true_type{},
|
return interpret_tuple_impl(t, separator, context, std::true_type{},
|
||||||
detail::make_index_sequence<std::tuple_size<Tuple>::value>{});
|
::sqlpp::make_index_sequence<std::tuple_size<Tuple>::value>{});
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Tuple, typename Separator, typename Context>
|
template <typename Tuple, typename Separator, typename Context>
|
||||||
auto interpret_tuple_without_braces(const Tuple& t, const Separator& separator, Context& context) -> Context&
|
auto interpret_tuple_without_braces(const Tuple& t, const Separator& separator, Context& context) -> Context&
|
||||||
{
|
{
|
||||||
return interpret_tuple_impl(t, separator, context, std::false_type{},
|
return interpret_tuple_impl(t, separator, context, std::false_type{},
|
||||||
detail::make_index_sequence<std::tuple_size<Tuple>::value>{});
|
::sqlpp::make_index_sequence<std::tuple_size<Tuple>::value>{});
|
||||||
}
|
}
|
||||||
} // namespace sqlpp
|
} // namespace sqlpp
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2015, Roland Bock
|
* Copyright (c) 2013, Roland Bock
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification,
|
* Redistribution and use in source and binary forms, with or without modification,
|
||||||
@ -27,8 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#warning: move index_sequence into compat
|
#include <sqlpp11/core/compat/utility.h>
|
||||||
#include <sqlpp11/core/detail/index_sequence.h>
|
|
||||||
|
|
||||||
namespace sqlpp
|
namespace sqlpp
|
||||||
{
|
{
|
||||||
@ -41,13 +40,13 @@ namespace sqlpp
|
|||||||
struct make_char_sequence_impl;
|
struct make_char_sequence_impl;
|
||||||
|
|
||||||
template <std::size_t N, const char* s, std::size_t... i>
|
template <std::size_t N, const char* s, std::size_t... i>
|
||||||
struct make_char_sequence_impl<N, s, sqlpp::detail::index_sequence<i...>>
|
struct make_char_sequence_impl<N, s, ::sqlpp::index_sequence<i...>>
|
||||||
{
|
{
|
||||||
using type = char_sequence<s[i]...>;
|
using type = char_sequence<s[i]...>;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <std::size_t N, const char* Input>
|
template <std::size_t N, const char* Input>
|
||||||
using make_char_sequence =
|
using make_char_sequence =
|
||||||
typename make_char_sequence_impl<N, Input, sqlpp::detail::make_index_sequence<N - 1>>::type;
|
typename make_char_sequence_impl<N, Input, ::sqlpp::make_index_sequence<N - 1>>::type;
|
||||||
|
|
||||||
} // namespace sqlpp
|
} // namespace sqlpp
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <sqlpp11/core/compat/string_view.h>
|
#include <sqlpp11/core/compat/string_view.h>
|
||||||
#include <sqlpp11/core/detail/index_sequence.h>
|
#include <sqlpp11/core/compat/utility.h>
|
||||||
#include <sqlpp11/core/field_spec.h>
|
#include <sqlpp11/core/field_spec.h>
|
||||||
#include <sqlpp11/core/query/result_row_fwd.h>
|
#include <sqlpp11/core/query/result_row_fwd.h>
|
||||||
|
|
||||||
@ -72,7 +72,7 @@ namespace sqlpp
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename Db, std::size_t... Is, typename... FieldSpecs>
|
template <typename Db, std::size_t... Is, typename... FieldSpecs>
|
||||||
struct result_row_impl<Db, detail::index_sequence<Is...>, FieldSpecs...>
|
struct result_row_impl<Db, ::sqlpp::index_sequence<Is...>, FieldSpecs...>
|
||||||
: public result_field<Db, Is, FieldSpecs>...
|
: public result_field<Db, Is, FieldSpecs>...
|
||||||
{
|
{
|
||||||
result_row_impl() = default;
|
result_row_impl() = default;
|
||||||
@ -109,9 +109,9 @@ namespace sqlpp
|
|||||||
|
|
||||||
template <typename Db, typename... FieldSpecs>
|
template <typename Db, typename... FieldSpecs>
|
||||||
struct result_row_t
|
struct result_row_t
|
||||||
: public detail::result_row_impl<Db, detail::make_index_sequence<sizeof...(FieldSpecs)>, FieldSpecs...>
|
: public detail::result_row_impl<Db, ::sqlpp::make_index_sequence<sizeof...(FieldSpecs)>, FieldSpecs...>
|
||||||
{
|
{
|
||||||
using _impl = detail::result_row_impl<Db, detail::make_index_sequence<sizeof...(FieldSpecs)>, FieldSpecs...>;
|
using _impl = detail::result_row_impl<Db, ::sqlpp::make_index_sequence<sizeof...(FieldSpecs)>, FieldSpecs...>;
|
||||||
bool _is_valid{false};
|
bool _is_valid{false};
|
||||||
|
|
||||||
result_row_t() : _impl()
|
result_row_t() : _impl()
|
||||||
|
Loading…
Reference in New Issue
Block a user