#ifndef CHILON_SAFE_ITERATOR_HPP
#define CHILON_SAFE_ITERATOR_HPP
#include <chilon/meta/return.hpp>
#include <chilon/print.hpp>
#include <unordered_map>
#include <vector>
namespace chilon {
template <class T>
struct safe_iterator {
T& container_;
size_t idx_;
public:
bool at_end() const { return idx_ >= container_.size(); }
safe_iterator& operator++() {
++idx_;
return *this;
}
auto operator*() CHILON_RETURN(container_[idx_]);
auto operator->() CHILON_RETURN(&container_[idx_]);
safe_iterator(T& container) : container_(container), idx_(0) {};
};
template <class T>
safe_iterator<T> make_safe_iterator(T& t) {
return safe_iterator<T>(t);
}
}
#endif