add octa::each

master
Daniel Kolesa 2015-05-26 19:25:20 +01:00
parent ea83f402ab
commit 029575d4a6
3 changed files with 21 additions and 1 deletions

View File

@ -16,7 +16,7 @@ namespace octa {
#define __OCTA_DEFINE_BINARY_OP(name, op, rettype) \
template<typename T> struct name { \
bool operator()(const T &x, const T &y) const { return x op y; } \
rettype operator()(const T &x, const T &y) const { return x op y; } \
typedef T FirstArgType; \
typedef T SecondArgType; \
typedef rettype ResultType; \

View File

@ -43,6 +43,11 @@ namespace std {
namespace octa {
template<typename T> using InitializerList = std::initializer_list<T>;
template<typename T>
auto each(InitializerList<T> init) -> decltype(init.each()) {
return init.each();
}
}
#endif

View File

@ -559,6 +559,21 @@ namespace octa {
EnumeratedRange<T> enumerate(const T &it) {
return EnumeratedRange<T>(it);
}
template<typename T>
auto each(T &r) -> decltype(r.each()) {
return r.each();
}
template<typename T>
auto each(const T &r) -> decltype(r.each()) {
return r.each();
}
template<typename T, size_t N>
PointerRange<T> each(T (&array)[N]) {
return PointerRange<T>(array, N);
}
}
#endif