| Index: third_party/cld/base/stl_decl_msvc.h
|
| ===================================================================
|
| --- third_party/cld/base/stl_decl_msvc.h (revision 0)
|
| +++ third_party/cld/base/stl_decl_msvc.h (revision 0)
|
| @@ -0,0 +1,107 @@
|
| +// 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 <wchar.h>
|
| +#include <string>
|
| +#include <vector>
|
| +#include <functional>
|
| +#include <utility>
|
| +#include <set>
|
| +#include <list>
|
| +#define slist list
|
| +#include <algorithm>
|
| +#include <deque>
|
| +#include <iostream>
|
| +#include <map>
|
| +#include <queue>
|
| +#include <stack>
|
| +
|
| +// copy_n isn't to be found anywhere in MSVC's STL
|
| +template <typename InputIterator, typename Size, typename OutputIterator>
|
| +std::pair<InputIterator, OutputIterator>
|
| +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 <typename T>
|
| +struct identity {
|
| + inline const T& operator()(const T& t) const { return t; }
|
| +};
|
| +
|
| +// Copied from STLport
|
| +template <class _Pair>
|
| +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 <class _Pair>
|
| +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 <typename Key>
|
| + struct hash;
|
| +
|
| + template <class Key,
|
| + class HashFcn = hash<Key> >
|
| + class hash_set;
|
| +
|
| + template <class Key, class Val,
|
| + class HashFcn = hash<Key> >
|
| + class hash_map;
|
| +
|
| + template <class Key,
|
| + class HashFcn = hash<Key> >
|
| + class hash_multiset;
|
| +
|
| + template <class Key, class Val,
|
| + class HashFcn = hash<Key> >
|
| + 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 */
|
|
|
| Property changes on: third_party\cld\base\stl_decl_msvc.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|