Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Common/utility.h

    r2e30d47 r4639b0d  
    1818#include <cctype>
    1919#include <algorithm>
    20 #include <functional>
    2120#include <iostream>
    2221#include <iterator>
     
    2827
    2928#include <cassert>
    30 
    31 #include "Common/Indenter.h"
    3229
    3330template< typename T >
     
    7875
    7976template< typename Container >
    80 void printAll( const Container &container, std::ostream &os, Indenter indent = {} ) {
     77void printAll( const Container &container, std::ostream &os, int indent = 0 ) {
    8178        for ( typename Container::const_iterator i = container.begin(); i != container.end(); ++i ) {
    8279                if ( *i ) {
    83                         os << indent;
    84                         (*i)->print( os, indent );
     80                        os << std::string( indent,  ' ' );
     81                        (*i)->print( os, indent + 2 );
    8582                        // need an endl after each element because it's not easy to know when each individual item should end
    8683                        os << std::endl;
     
    281278};
    282279
    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 
    302280template< typename T >
    303281struct ValueGuardPtr< std::list< T > > {
     
    354332template< typename T1, typename T2 >
    355333struct group_iterate_t {
    356 private:
    357         std::tuple<T1, T2> args;
    358 public:
    359334        group_iterate_t( bool skipBoundsCheck, const T1 & v1, const T2 & v2 ) : args(v1, v2) {
    360335                assertf(skipBoundsCheck || v1.size() == v2.size(), "group iteration requires containers of the same size: <%zd, %zd>.", v1.size(), v2.size());
    361336        };
    362337
    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 
    367338        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;
    368344                typedef std::tuple<T1Iter, T2Iter> IterTuple;
    369345                IterTuple it;
     
    375351                value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); }
    376352        };
    377 
    378353        iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); }
    379354        iterator end() { return iterator( std::get<0>(args).end(), std::get<1>(args).end() ); }
     355
     356private:
     357        std::tuple<T1, T2> args;
    380358};
    381359
Note: See TracChangeset for help on using the changeset viewer.