Changeset 67a67af for src/Common
- Timestamp:
- Aug 11, 2017, 10:55:14 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 03321e4, f196351
- Parents:
- 3b4571b (diff), 54cd58b0 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- src/Common
- Files:
-
- 1 added
- 1 edited
-
Indenter.h (added)
-
utility.h (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Common/utility.h
r3b4571b r67a67af 24 24 #include <sstream> 25 25 #include <string> 26 #include <type_traits> 26 27 27 28 #include <cassert> … … 304 305 // for ( val : group_iterate( container1, container2, ... ) ) {} 305 306 // syntax to have a for each that iterates multiple containers of the same length 306 // TODO: update to use variadic arguments , perfect forwarding307 // TODO: update to use variadic arguments 307 308 308 309 template< typename T1, typename T2 > … … 313 314 314 315 struct iterator { 315 typedef std::tuple<typename T1::value_type, typename T2::value_type> value_type; 316 typedef typename T1::iterator T1Iter; 317 typedef typename T2::iterator T2Iter; 316 typedef typename std::remove_reference<T1>::type T1val; 317 typedef typename std::remove_reference<T2>::type T2val; 318 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type; 319 typedef typename T1val::iterator T1Iter; 320 typedef typename T2val::iterator T2Iter; 318 321 typedef std::tuple<T1Iter, T2Iter> IterTuple; 319 322 IterTuple it; … … 323 326 } 324 327 bool operator!=( const iterator &other ) const { return it != other.it; } 325 value_type operator*() const { return std:: make_tuple( *std::get<0>(it), *std::get<1>(it) ); }328 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); } 326 329 }; 327 330 iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); } … … 333 336 334 337 template< typename... Args > 335 group_iterate_t<Args...> group_iterate( const Args&... args ) {336 return group_iterate_t<Args...>( args...);338 group_iterate_t<Args...> group_iterate( Args &&... args ) { 339 return group_iterate_t<Args...>(std::forward<Args>( args )...); 337 340 } 338 341
Note:
See TracChangeset
for help on using the changeset viewer.