// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // In most .h files, we would rather include a declaration of an stl // rather than including the appropriate stl h file (which brings in // lots of noise). For many STL classes this is ok (eg pair), but for // some it's really annoying. We define those here, so you can // just include this file instead of having to deal with the annoyance. // // Most of the annoyance, btw, has to do with the default allocator. #ifndef _STL_DECL_MSVC_H #define _STL_DECL_MSVC_H // VC++ namespace / STL issues; make them explicit #include #include #include #include #include #include #include #define slist list #include #include #include #include #include #include // copy_n isn't to be found anywhere in MSVC's STL template std::pair copy_n(InputIterator in, Size count, OutputIterator out) { for ( ; count > 0; --count) { *out = *in; ++out; ++in; } return std::make_pair(in, out); } // Nor are the following selectors template struct identity { inline const T& operator()(const T& t) const { return t; } }; // Copied from STLport template struct select1st : public std::unary_function<_Pair, typename _Pair::first_type> { const typename _Pair::first_type& operator()(const _Pair& __x) const { return __x.first; } }; template struct select2nd : public std::unary_function<_Pair, typename _Pair::second_type> { const typename _Pair::second_type& operator()(const _Pair& __x) const { return __x.second; } }; #if _MSC_VER >= 1300 // If you compile on Windows and get a compile-time error because // some google3 code specifies a 3rd or 4th parameter to one of // these template classes, then you have to put in some #ifdefs // and use the NATIVE_HASH_NAMESPACE::hash_(set|map) implementation. namespace msvchash { template struct hash; template > class hash_set; template > class hash_map; template > class hash_multiset; template > class hash_multimap; } // end namespace msvchash using msvchash::hash_set; using msvchash::hash_map; using msvchash::hash; using msvchash::hash_multimap; using msvchash::hash_multiset; #else #define hash_map map #define hash_set set #endif using namespace std; #endif /* #ifdef _STL_DECL_MSVC_H */