add octa::each
parent
ea83f402ab
commit
029575d4a6
|
@ -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; \
|
||||
|
|
|
@ -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
|
15
octa/range.h
15
octa/range.h
|
@ -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
|
Loading…
Reference in New Issue