| @ -0,0 +1,38 @@ | |||||
| // 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> | |||||
| #include "re2_cache.h" | |||||
| #include <cstddef> | |||||
| #include <string> | |||||
| #include <re2/re2.h> | |||||
| namespace i18n { | |||||
| namespace phonenumbers { | |||||
| using std::string; | |||||
| RE2Cache::RE2Cache(size_t /*max_items*/) {} | |||||
| RE2Cache::~RE2Cache() {} | |||||
| RE2Cache::ScopedAccess::ScopedAccess(RE2Cache* /*cache*/, const string& pattern) | |||||
| : pattern_(pattern), regexp_(new RE2(pattern_)) {} | |||||
| RE2Cache::ScopedAccess::~ScopedAccess() {} | |||||
| } // namespace phonenumbers | |||||
| } // namespace i18n | |||||
| @ -0,0 +1,60 @@ | |||||
| // 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> | |||||
| // The RE2Cache provides an interface to store RE2 objects in some kind of | |||||
| // cache. Currently, it doesn't do any caching at all but just provides the | |||||
| // interface. TODO: Implement caching. ;-) | |||||
| #ifndef I18N_PHONENUMBERS_RE2_CACHE_H_ | |||||
| #define I18N_PHONENUMBERS_RE2_CACHE_H_ | |||||
| #include <cstddef> | |||||
| #include <string> | |||||
| #include "base/scoped_ptr.h" | |||||
| namespace re2 { | |||||
| class RE2; | |||||
| } // namespace re2 | |||||
| namespace i18n { | |||||
| namespace phonenumbers { | |||||
| using re2::RE2; | |||||
| using std::string; | |||||
| class RE2Cache { | |||||
| public: | |||||
| explicit RE2Cache(size_t max_items); | |||||
| ~RE2Cache(); | |||||
| class ScopedAccess { | |||||
| public: | |||||
| ScopedAccess(RE2Cache* cache, const string& pattern); | |||||
| ~ScopedAccess(); | |||||
| operator const RE2&() const { return *regexp_; } | |||||
| private: | |||||
| const string pattern_; | |||||
| scoped_ptr<const RE2> regexp_; | |||||
| friend class RE2CacheTest_AccessConstructor_Test; | |||||
| }; | |||||
| }; | |||||
| } // namespace phonenumbers | |||||
| } // namespace i18n | |||||
| #endif // I18N_PHONENUMBERS_RE2_CACHE_H_ | |||||
| @ -0,0 +1,60 @@ | |||||
| // 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> | |||||
| // Test the wrapper of the cache. The cache functionality itself will be tested | |||||
| // by the unit test for the cache implementation. | |||||
| #include <cstddef> | |||||
| #include <string> | |||||
| #include <gtest/gtest.h> | |||||
| #include <re2/re2.h> | |||||
| #include "re2_cache.h" | |||||
| namespace i18n { | |||||
| namespace phonenumbers { | |||||
| using std::string; | |||||
| class RE2CacheTest : public testing::Test { | |||||
| protected: | |||||
| static const size_t max_items_ = 2; | |||||
| RE2CacheTest() : cache_(max_items_) {} | |||||
| virtual ~RE2CacheTest() {} | |||||
| RE2Cache cache_; | |||||
| }; | |||||
| TEST_F(RE2CacheTest, AccessConstructor) { | |||||
| static const string foo("foo"); | |||||
| RE2Cache::ScopedAccess access(&cache_, foo); | |||||
| EXPECT_EQ(foo, access.pattern_); | |||||
| EXPECT_TRUE(access.regexp_ != NULL); | |||||
| } | |||||
| TEST_F(RE2CacheTest, OperatorRE2) { | |||||
| static const string foo("foo"); | |||||
| RE2Cache::ScopedAccess access(&cache_, foo); | |||||
| const RE2& regexp = access; | |||||
| EXPECT_EQ(foo, regexp.pattern()); | |||||
| } | |||||
| } // namespace phonenumbers | |||||
| } // namespace i18n | |||||