Index: third_party/libphonenumber/cpp/src/re2_cache.h |
=================================================================== |
--- third_party/libphonenumber/cpp/src/re2_cache.h (revision 0) |
+++ third_party/libphonenumber/cpp/src/re2_cache.h (revision 0) |
@@ -0,0 +1,83 @@ |
+// Copyright (C) 2011 Google Inc. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+// Author: Fredrik Roubert <roubert@google.com> |
+ |
+// RE2Cache is a simple wrapper around hash_map<> to store RE2 objects. |
+// |
+// To get a cached RE2 object for a regexp pattern string, create a ScopedAccess |
+// object with a pointer to the cache object and the pattern string itself as |
+// constructor parameters. If an RE2 object corresponding to the pattern string |
+// doesn't already exist, it will be created by the access object constructor. |
+// The access object implements operator const RE& and can therefore be passed |
+// as an argument to any function that expects an RE2 object. |
+// |
+// RE2Cache cache; |
+// RE2Cache::ScopedAccess foo(&cache, "foo"); |
+// bool match = RE2::FullMatch("foobar", foo); |
+ |
+#ifndef I18N_PHONENUMBERS_RE2_CACHE_H_ |
+#define I18N_PHONENUMBERS_RE2_CACHE_H_ |
+ |
+#ifdef __DEPRECATED |
+#undef __DEPRECATED // Don't warn for using <hash_map>. |
+#endif |
+ |
+#include <cstddef> |
+#include <hash_map> |
+#include <string> |
+ |
+#include "base/scoped_ptr.h" |
+#include "base/synchronization/lock.h" |
+ |
+namespace re2 { |
+class RE2; |
+} // namespace re2 |
+ |
+namespace i18n { |
+namespace phonenumbers { |
+ |
+using re2::RE2; |
+using std::string; |
+using __gnu_cxx::hash_map; |
+ |
+class RE2Cache { |
+ private: |
+ typedef hash_map<string, const RE2*> CacheImpl; |
+ |
+ public: |
+ explicit RE2Cache(size_t min_items); |
+ ~RE2Cache(); |
+ |
+ class ScopedAccess { |
+ public: |
+ ScopedAccess(RE2Cache* cache, const string& pattern); |
+ operator const RE2&() const { return *regexp_; } |
+ |
+ private: |
+ const RE2* regexp_; |
+ friend class RE2CacheTest_AccessConstructor_Test; |
+ }; |
+ |
+ private: |
+ base::Lock lock_; // protects cache_impl_ |
+ scoped_ptr<CacheImpl> cache_impl_; // protected by lock_ |
+ friend class RE2CacheTest_CacheConstructor_Test; |
+ friend class RE2CacheTest_AccessConstructor_Test; |
+}; |
+ |
+} // namespace phonenumbers |
+} // namespace i18n |
+ |
+#endif // I18N_PHONENUMBERS_RE2_CACHE_H_ |
Property changes on: third_party\libphonenumber\cpp\src\re2_cache.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |