Changes in src/Common/utility.h [2e30d47:4639b0d]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/utility.h
r2e30d47 r4639b0d 18 18 #include <cctype> 19 19 #include <algorithm> 20 #include <functional>21 20 #include <iostream> 22 21 #include <iterator> … … 28 27 29 28 #include <cassert> 30 31 #include "Common/Indenter.h"32 29 33 30 template< typename T > … … 78 75 79 76 template< typename Container > 80 void printAll( const Container &container, std::ostream &os, Indenter indent = {}) {77 void printAll( const Container &container, std::ostream &os, int indent = 0 ) { 81 78 for ( typename Container::const_iterator i = container.begin(); i != container.end(); ++i ) { 82 79 if ( *i ) { 83 os << indent;84 (*i)->print( os, indent );80 os << std::string( indent, ' ' ); 81 (*i)->print( os, indent + 2 ); 85 82 // need an endl after each element because it's not easy to know when each individual item should end 86 83 os << std::endl; … … 281 278 }; 282 279 283 template< typename aT >284 struct FuncGuard {285 aT m_after;286 287 template< typename bT >288 FuncGuard( bT before, aT after ) : m_after( after ) {289 before();290 }291 292 ~FuncGuard() {293 m_after();294 }295 };296 297 template< typename bT, typename aT >298 FuncGuard<aT> makeFuncGuard( bT && before, aT && after ) {299 return FuncGuard<aT>( std::forward<bT>(before), std::forward<aT>(after) );300 }301 302 280 template< typename T > 303 281 struct ValueGuardPtr< std::list< T > > { … … 354 332 template< typename T1, typename T2 > 355 333 struct group_iterate_t { 356 private:357 std::tuple<T1, T2> args;358 public:359 334 group_iterate_t( bool skipBoundsCheck, const T1 & v1, const T2 & v2 ) : args(v1, v2) { 360 335 assertf(skipBoundsCheck || v1.size() == v2.size(), "group iteration requires containers of the same size: <%zd, %zd>.", v1.size(), v2.size()); 361 336 }; 362 337 363 typedef std::tuple<decltype(*std::get<0>(args).begin()), decltype(*std::get<1>(args).begin())> value_type;364 typedef decltype(std::get<0>(args).begin()) T1Iter;365 typedef decltype(std::get<1>(args).begin()) T2Iter;366 367 338 struct iterator { 339 typedef typename std::remove_reference<T1>::type T1val; 340 typedef typename std::remove_reference<T2>::type T2val; 341 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type; 342 typedef typename T1val::iterator T1Iter; 343 typedef typename T2val::iterator T2Iter; 368 344 typedef std::tuple<T1Iter, T2Iter> IterTuple; 369 345 IterTuple it; … … 375 351 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); } 376 352 }; 377 378 353 iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); } 379 354 iterator end() { return iterator( std::get<0>(args).end(), std::get<1>(args).end() ); } 355 356 private: 357 std::tuple<T1, T2> args; 380 358 }; 381 359
Note:
See TracChangeset
for help on using the changeset viewer.