6 #ifndef AMDAEMON_UTIL_CONTAINER_H 7 #define AMDAEMON_UTIL_CONTAINER_H 13 #include <type_traits> 29 template<
class DestContainer,
class SrcContainer>
30 struct ContainerToContainer
32 template<
class TheSrcContainer>
33 DestContainer operator()(TheSrcContainer&& src)
const 40 begin(std::forward<TheSrcContainer>(src)),
41 end(std::forward<TheSrcContainer>(src)));
47 template<
class Container>
48 struct ContainerToContainer<Container, Container>
50 template<
class TheSrcContainer>
51 Container operator()(TheSrcContainer&& src)
const 59 template<
class Container,
class SizeType,
class Getter>
60 struct GetterToContainer
66 Container operator()(SizeType count, Getter&& getter)
const 70 SizeType i = SizeType();
72 std::back_inserter(c),
74 [&]() -> decltype(getter(i)) {
return getter(i++); });
82 template<
class T,
class SizeType,
class Getter>
83 struct GetterToContainer<
std::vector<T>, SizeType, Getter>
89 std::vector<T> operator()(SizeType count, Getter&& getter)
const 94 SizeType i = SizeType();
96 std::back_inserter(c),
98 [&]() -> decltype(getter(i)) {
return getter(i++); });
111 template<
class Container,
class T>
112 std::ptrdiff_t
findIndex(Container& container,
const T& target)
117 const auto itrBegin = begin(container);
118 const auto itrEnd = end(container);
119 const auto itr = std::find(itrBegin, itrEnd, target);
121 return static_cast<std::ptrdiff_t
>((itr == itrEnd) ? -1 : std::distance(itrBegin, itr));
132 template<
class DestContainer,
class SrcContainer>
136 ::amdaemon::util::detail::ContainerToContainer<DestContainer, SrcContainer>()(
137 std::forward<SrcContainer>(src));
153 template<
class Container,
class SizeType,
class Getter>
157 ::amdaemon::util::detail::GetterToContainer<Container, SizeType, Getter>()(
159 std::forward<Getter>(getter));
169 template<std::
size_t N,
class T>
172 return std::bitset<N>(std::forward<T>(value));
179 template<
class Integer>
182 typename std::enable_if<
183 std::is_integral<Integer>::value,
184 std::bitset<sizeof(Integer) * 8>>::type
186 return toBitset<sizeof(Integer) * 8>(value);
193 #endif // AMDAEMON_UTIL_CONTAINER_H std::ptrdiff_t findIndex(Container &container, const T &target)
コンテナから指定した値を検索し、そのインデックスを返す。
Definition: container.h:112
Definition: AccessCode.h:202
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
DestContainer toContainer(SrcContainer &&src)
コンテナを別のコンテナ型に変換する。
Definition: container.h:133
std::bitset< N > toBitset(T &&value)
引数値を std::bitset 型に変換する。
Definition: container.h:170