12fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// Copyright (C) 2014 Google Inc.
22fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org//
32fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License");
42fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// you may not use this file except in compliance with the License.
52fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// You may obtain a copy of the License at
62fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org//
72fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0
82fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org//
92fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// Unless required by applicable law or agreed to in writing, software
102fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS,
112fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
122fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// See the License for the specific language governing permissions and
132fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org// limitations under the License.
142fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
1526e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com#ifndef I18N_ADDRESSINPUT_ADDRESS_NORMALIZER_H_
1626e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com#define I18N_ADDRESSINPUT_ADDRESS_NORMALIZER_H_
172fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
182fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/util/basictypes.h>
192fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org#include <libaddressinput/util/scoped_ptr.h>
202fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
212fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgnamespace i18n {
222fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgnamespace addressinput {
232fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
242fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgclass PreloadSupplier;
252fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.orgclass StringCompare;
268a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.orgstruct AddressData;
272fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
2826e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.comclass AddressNormalizer {
292fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org public:
302fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  // Does not take ownership of |supplier|.
3126e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  explicit AddressNormalizer(const PreloadSupplier* supplier);
3226e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  ~AddressNormalizer();
332fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
3426e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  // Converts the names of different fields in the address into their canonical
3526e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  // form. Should be called only when supplier->IsLoaded() returns true for
3626e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  // the region code of the |address|.
3726e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  void Normalize(AddressData* address) const;
382fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
392fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org private:
402fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  const PreloadSupplier* const supplier_;  // Not owned.
412fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org  const scoped_ptr<const StringCompare> compare_;
422fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
4326e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com  DISALLOW_COPY_AND_ASSIGN(AddressNormalizer);
442fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org};
452fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
462fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}  // namespace addressinput
472fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org}  // namespace i18n
482fbc3617221414ff659533aaf8033526443b3773rouslan@chromium.org
4926e0a878fc7765d1fa2fbd279f2168b27933f63flararennie@google.com#endif  // I18N_ADDRESSINPUT_ADDRESS_NORMALIZER_H_
50