Changeset 940bba3
- Timestamp:
- Sep 8, 2016, 4:01:35 PM (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:
- 119745e
- Parents:
- 9f70ab57
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/utility.h
r9f70ab57 r940bba3 18 18 19 19 #include <cctype> 20 #include <algorithm> 20 21 #include <iostream> 21 22 #include <iterator> … … 111 112 return tmp; 112 113 } // if 113 }114 115 template< class T, typename ResultType, ResultType( T::* memfunc )() >116 ResultType dispatch( T *pT ) {117 return (pT->*memfunc)();118 114 } 119 115 … … 162 158 } 163 159 164 template< class Constructed, typename Arg >165 Constructed *ctor( Arg arg ) {166 Constructed *c = new Constructed( arg );167 return c;168 }169 170 template< class Constructed, typename Arg >171 Constructed ctor_noptr( Arg arg ) {172 return Constructed( arg );173 }174 175 160 template< typename T > 176 161 void replace( std::list< T > &org, typename std::list< T >::iterator pos, std::list< T > &with ) { … … 185 170 } 186 171 187 template< typename T1, typename T2 > 188 T2 *cast_ptr( T1 *from ) { 189 return dynamic_cast< T2 * >( from ); 190 } 191 192 template< class Exception, typename Arg > 193 void inline assert_throw( bool pred, Arg arg ) { 194 if (pred) throw Exception( arg ); 195 } 196 197 template< typename T > 198 struct is_null_pointer { 199 bool operator()( const T *ptr ) { return ( ptr == 0 ); } 200 }; 201 202 template< class InputIterator, class OutputIterator, class Predicate > 203 void filter(InputIterator begin, InputIterator end, OutputIterator out, Predicate pred) { 204 while ( begin++ != end ) 205 if ( pred(*begin) ) *out++ = *begin; 206 207 return; 208 } 209 210 template< class InputIterator1, class InputIterator2, class OutputIterator > 211 void zip( InputIterator1 b1, InputIterator1 e1, InputIterator2 b2, InputIterator2 e2, OutputIterator out ) { 212 while ( b1 != e1 && b2 != e2 ) 213 *out++ = std::pair<typename InputIterator1::value_type, typename InputIterator2::value_type>(*b1++, *b2++); 172 template< typename... Args > 173 auto filter(Args&&... args) -> decltype(std::copy_if(std::forward<Args>(args)...)) { 174 return std::copy_if(std::forward<Args>(args)...); 175 } 176 177 template< typename... Args > 178 auto zip(Args&&... args) -> decltype(zipWith(std::forward<Args>(args)..., std::make_pair)) { 179 return zipWith(std::forward<Args>(args)..., std::make_pair); 214 180 } 215 181 … … 221 187 222 188 // it's nice to actually be able to increment iterators by an arbitrary amount 223 template< typename Iterator > 224 Iterator operator+(Iterator i, int inc) { 225 while ( inc > 0 ) { 226 ++i; 227 --inc; 228 } 229 return i; 189 template< class InputIt, class Distance > 190 InputIt operator+( InputIt it, Distance n ) { 191 advance(it, n); 192 return it; 230 193 } 231 194 … … 246 209 warn_single( params... ); 247 210 } 211 212 // ----------------------------------------------------------------------------- 213 // Ref Counted Singleton class 214 // Objects that inherit from this class will have at most one reference to it 215 // but if all references die, the object will be deleted. 248 216 249 217 template< typename ThisType > … … 265 233 std::weak_ptr<ThisType> RefCountSingleton<ThisType>::global_instance; 266 234 235 // ----------------------------------------------------------------------------- 267 236 // RAII object to regulate "save and restore" behaviour, e.g. 268 237 // void Foo::bar() { … … 279 248 }; 280 249 250 // ----------------------------------------------------------------------------- 251 // Helper struct and function to support 252 // for ( val : reverseIterate( container ) ) {} 253 // syntax to have a for each that iterates backwards 254 281 255 template< typename T > 282 256 struct reverseIterate_t {
Note: See TracChangeset
for help on using the changeset viewer.