-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutil.hpp
More file actions
32 lines (28 loc) · 1.07 KB
/
Copy pathutil.hpp
File metadata and controls
32 lines (28 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef UTIL_HPP
#define UTIL_HPP
#include <iterator>
struct null_output_iterator
: public std::iterator<std::output_iterator_tag, void, void, void, void>
{
template<typename T>
inline const null_output_iterator& operator=(T&&) const { return *this; }
inline const null_output_iterator& operator*() const { return *this; }
inline const null_output_iterator& operator++() const { return *this; }
inline const null_output_iterator& operator++(int) const { return *this; }
};
template<typename T>
class assign_iterator
: public std::iterator<std::output_iterator_tag, T>
{
public:
inline assign_iterator() : x_m(NULL) {}
explicit inline assign_iterator(T& x) : x_m(&x) {}
inline assign_iterator(const assign_iterator&) = default;
inline T& operator*() const { return *x_m; }
inline const assign_iterator& operator++() const { return *this; }
inline const assign_iterator& operator++(int) const { return *this; }
private:
T* x_m;
};
#define VARLOG(...) std::cerr << __FILE__ << ':' << __LINE__ << " " << #__VA_ARGS__ << " [" << (__VA_ARGS__) << "]" << std::endl
#endif