Chromium Code Reviews| Index: third_party/libaddressinput/chromium/cpp/src/ruleset.h |
| diff --git a/third_party/libaddressinput/chromium/cpp/src/ruleset.h b/third_party/libaddressinput/chromium/cpp/src/ruleset.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..26ce983173f38cb8a7bbea5755d97602711abebe |
| --- /dev/null |
| +++ b/third_party/libaddressinput/chromium/cpp/src/ruleset.h |
| @@ -0,0 +1,86 @@ |
| +// Copyright (C) 2013 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. |
| + |
| +#ifndef I18N_ADDRESSINPUT_RULESET_H_ |
| +#define I18N_ADDRESSINPUT_RULESET_H_ |
| + |
| +#include <libaddressinput/util/basictypes.h> |
| +#include <libaddressinput/util/scoped_ptr.h> |
| + |
| +#include <map> |
| +#include <string> |
| + |
| +namespace i18n { |
| +namespace addressinput { |
| + |
| +class Rule; |
| + |
| +// A recursive data structure that stores a set of rules for a region. Can store |
| +// the rules for a country, its administrative areas, localities, and dependent |
| +// localities, in addition to the language-specific rules. |
| +// |
| +// Example for Canada and some of its provinces: |
| +// CA-->fr |
| +// | |
| +// ------------------------------------- |
| +// | | | | | |
| +// v v v v v |
| +// AB-->fr BC-->fr MB-->fr NB-->fr NL-->fr |
| +// |
| +// The rules in Canada are in English by default. Each rule also has a French |
| +// language version. |
| +class Ruleset { |
| + public: |
| + // Builds a ruleset with a region-wide |rule| in the default language of the |
| + // country. |
| + explicit Ruleset(scoped_ptr<Rule> rule); |
| + |
| + ~Ruleset(); |
| + |
| + // Returns the region-wide rule in the default language of the country. The |
| + // caller does not own the result. |
| + const Rule* GetRule() const; |
|
Evan Stade
2014/01/06 22:54:19
return a const ref
also, why not rule() (i.e. c h
please use gerrit instead
2014/01/06 23:44:35
Done.
|
| + |
| + // Adds and returns a ruleset for |sub_region| with the subregion-wide |rule| |
| + // in the default language of the country. The caller does not own the result. |
| + Ruleset* AddSubRegion(const std::string& sub_region, scoped_ptr<Rule> rule); |
| + |
| + // Adds a language-specific |rule| for |language_code| for this region. |
| + void AddLanguageCode(const std::string& language_code, scoped_ptr<Rule> rule); |
| + |
| + // Returns the set of rules for |sub_region|. The result can be NULL. The |
| + // caller does not own the result. |
| + Ruleset* GetSubRegion(const std::string& sub_region) const; |
| + |
| + // Returns the language-specific rule for |language_code|. The result can be |
| + // NULL. The caller does not own the result. |
| + const Rule* GetLanguageCode(const std::string& language_code) const; |
| + |
| + private: |
| + // The region-wide rule in the default language of the country. |
| + scoped_ptr<const Rule> rule_; |
| + |
| + // Owned rulesets for sub-regions. |
| + std::map<std::string, Ruleset*> sub_regions_; |
| + |
| + // Owned language-specific rules for the region. |
| + std::map<std::string, const Rule*> language_codes_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(Ruleset); |
| +}; |
| + |
| +} // namespace addressinput |
| +} // namespace i18n |
| + |
| +#endif // I18N_ADDRESSINPUT_RULESET_H_ |