ize d; if( (d=w - tmp.size()) <=0 ) { // minimal length is already >= w, so no padding (cool!) res.swap(tmp); } else { // hum.. we need to pad (it was necessarily multi-output) typedef typename string_t::size_type size_type; size_type i = 0; while( i<tmp.size() && tmp[i] == res[i] ) // find where we should pad. ++i; tmp.insert(i, static_cast<size_type>( d ), oss_.fill()); res.swap( tmp ); } } else { // okay, only one thing was printed and padded, so res is fine. } } prev_state.apply_on(oss_); empty_buf( oss_); oss_.clear(); } // end- put(..) } // local namespace template<class T> void distribute(basic_format& self, T x) // call put(x, ..) on every occurence of the current argument : { if(self.cur_arg_ >= self.num_args_) { if( self.exceptions() & too_many_args_bit ) boost::throw_exception(too_many_args()); // too many variables have been supplied ! else return; } for(unsigned long i=0; i < self.items_.size(); ++i) { if(self.items_[i].argN_ == self.cur_arg_) { put<T> (x, self.items_[i], self.items_[i].res_, self.oss_ ); } } } template<class T> basic_format& feed(basic_format& self, T x) { if(self.dumped_) self.clear(); distribute<T> (self, x); ++self.cur_arg_; if(self.bound_.size() != 0) { while( self.cur_arg_ < self.num_args_ && self.bound_[self.cur_arg_] ) ++self.cur_arg_; } // this arg is finished, reset the stream's format state self.state0_.apply_on(self.oss_); return self; } } // namespace detail } // namespace io } // namespace boost #endif // BOOST_FORMAT_FEED_ARGS_HPP