00001
00002
00013
00014
00015 #ifndef polybori_iterators_PBoRiOutIter_h_
00016 #define polybori_iterators_PBoRiOutIter_h_
00017
00018
00019 #include <polybori/pbori_defs.h>
00020
00021 BEGIN_NAMESPACE_PBORI
00022
00030 template <class DataType, class RhsType, class BinOp>
00031 class PBoRiOutIter {
00032 public:
00033
00035 typedef DataType data_type;
00036
00038 typedef RhsType rhs_type;
00039
00041 typedef BinOp op_type;
00042
00044 typedef PBoRiOutIter<data_type, rhs_type, op_type> self;
00045
00047
00048 typedef std::output_iterator_tag iterator_category;
00049 typedef void difference_type;
00050 typedef void pointer;
00051 typedef void reference;
00052 typedef void value_type;
00054
00056 PBoRiOutIter(data_type& data_, op_type op_ = op_type()):
00057 data(data_), op(op_) {}
00058
00060 PBoRiOutIter(const self& rhs):
00061 data(rhs.data), op(rhs.op) {}
00062
00064 ~PBoRiOutIter() {}
00065
00068 self& operator*() { return *this; }
00069
00071 self& operator=(const self& rhs) {
00072 data = rhs.data;
00073 op = rhs.op;
00074 return *this;
00075 }
00076
00078 self& operator=(rhs_type rhs){
00079 op(data, rhs);
00080 return *this;
00081 }
00082
00084 self& operator++() { return *this; }
00085
00087 self operator++(int) { return *this; }
00088
00089 protected:
00090 data_type& data;
00091 op_type op;
00092 };
00093
00094
00095 END_NAMESPACE_PBORI
00096
00097 #endif