mirror of
				https://github.com/boostorg/iterator.git
				synced 2025-11-04 10:21:38 +01:00 
			
		
		
		
	
		
			
	
	
		
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			100 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[section:function_output Function Output Iterator]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The function output iterator adaptor makes it easier to create custom
							 | 
						||
| 
								 | 
							
								output iterators. The adaptor takes a unary function and creates a
							 | 
						||
| 
								 | 
							
								model of Output Iterator. Each item assigned to the output iterator is
							 | 
						||
| 
								 | 
							
								passed as an argument to the unary function.  The motivation for this
							 | 
						||
| 
								 | 
							
								iterator is that creating a conforming output iterator is non-trivial,
							 | 
						||
| 
								 | 
							
								particularly because the proper implementation usually requires a
							 | 
						||
| 
								 | 
							
								proxy object.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h2 Example]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    struct string_appender
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        string_appender(std::string& s)
							 | 
						||
| 
								 | 
							
								            : m_str(&s)
							 | 
						||
| 
								 | 
							
								        {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        void operator()(const std::string& x) const
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            *m_str += x;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        std::string* m_str;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    int main(int, char*[])
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      std::vector<std::string> x;
							 | 
						||
| 
								 | 
							
								      x.push_back("hello");
							 | 
						||
| 
								 | 
							
								      x.push_back(" ");
							 | 
						||
| 
								 | 
							
								      x.push_back("world");
							 | 
						||
| 
								 | 
							
								      x.push_back("!");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      std::string s = "";
							 | 
						||
| 
								 | 
							
								      std::copy(x.begin(), x.end(), 
							 | 
						||
| 
								 | 
							
										boost::make_function_output_iterator(string_appender(s)));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      std::cout << s << std::endl;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return 0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h2 Reference]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h3 Synopsis]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template <class UnaryFunction>
							 | 
						||
| 
								 | 
							
								  class function_output_iterator {
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								    typedef std::output_iterator_tag iterator_category;
							 | 
						||
| 
								 | 
							
								    typedef void                     value_type;
							 | 
						||
| 
								 | 
							
								    typedef void                     difference_type;
							 | 
						||
| 
								 | 
							
								    typedef void                     pointer;
							 | 
						||
| 
								 | 
							
								    typedef void                     reference;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    explicit function_output_iterator();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    explicit function_output_iterator(const UnaryFunction& f);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /* see below */ operator*();
							 | 
						||
| 
								 | 
							
								    function_output_iterator& operator++();
							 | 
						||
| 
								 | 
							
								    function_output_iterator& operator++(int);
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								    UnaryFunction m_f;     // exposition only
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h3 Requirements]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`UnaryFunction` must be Assignable and Copy Constructible.  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h3 Concepts]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								`function_output_iterator` is a model of the Writable and
							 | 
						||
| 
								 | 
							
								Incrementable Iterator concepts.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[h3 Operations]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[*Effects: ] Constructs an instance of `function_output_iterator` 
							 | 
						||
| 
								 | 
							
								  with `m_f` constructed from `f`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  unspecified_type operator*();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[*Returns: ] An object `r` of unspecified type such that `r = t`
							 | 
						||
| 
								 | 
							
								  is equivalent to `m_f(t)` for all `t`.
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function_output_iterator& operator++();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[*Returns: ] `*this`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function_output_iterator& operator++(int);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[*Returns: ] `*this`.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[endsect]
							 |