| 43 | */ |
| 44 | template< typename SequenceSequenceT, typename Range1T> |
| 45 | inline typename range_value<SequenceSequenceT>::type |
| 46 | join( |
| 47 | const SequenceSequenceT& Input, |
| 48 | const Range1T& Separator) |
| 49 | { |
| 50 | // Define working types |
| 51 | typedef typename range_value<SequenceSequenceT>::type ResultT; |
| 52 | typedef typename range_const_iterator<SequenceSequenceT>::type InputIteratorT; |
| 53 | |
| 54 | // Parse input |
| 55 | InputIteratorT itBegin=::boost::begin(Input); |
| 56 | InputIteratorT itEnd=::boost::end(Input); |
| 57 | |
| 58 | // Construct container to hold the result |
| 59 | ResultT Result; |
| 60 | |
| 61 | // Append first element |
| 62 | if(itBegin!=itEnd) |
| 63 | { |
| 64 | detail::insert(Result, ::boost::end(Result), *itBegin); |
| 65 | ++itBegin; |
| 66 | } |
| 67 | |
| 68 | for(;itBegin!=itEnd; ++itBegin) |
| 69 | { |
| 70 | // Add separator |
| 71 | detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator)); |
| 72 | // Add element |
| 73 | detail::insert(Result, ::boost::end(Result), *itBegin); |
| 74 | } |
| 75 | |
| 76 | return Result; |
| 77 | } |
| 78 | |
| 79 | // join_if ----------------------------------------------------------// |
| 80 |
no test coverage detected