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