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