summaryrefslogtreecommitdiffstats
path: root/app/l10n_util_collator.h
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-21 23:30:17 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-21 23:30:17 +0000
commitc051a1b531d77e7d2eb3afd1dec67e13aab39154 (patch)
treea6dcc2760d1cdc216a329298052723cb0e25e242 /app/l10n_util_collator.h
parent28df88370f358468bffa1e1f6bc43aa25c11e388 (diff)
downloadchromium_src-c051a1b531d77e7d2eb3afd1dec67e13aab39154.zip
chromium_src-c051a1b531d77e7d2eb3afd1dec67e13aab39154.tar.gz
chromium_src-c051a1b531d77e7d2eb3afd1dec67e13aab39154.tar.bz2
Move l10n_util to ui/base
BUG=none TEST=none TBR=brettw git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72227 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app/l10n_util_collator.h')
-rw-r--r--app/l10n_util_collator.h154
1 files changed, 0 insertions, 154 deletions
diff --git a/app/l10n_util_collator.h b/app/l10n_util_collator.h
deleted file mode 100644
index bcbfd82..0000000
--- a/app/l10n_util_collator.h
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 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.
-
-#ifndef APP_L10N_UTIL_COLLATOR_H_
-#define APP_L10N_UTIL_COLLATOR_H_
-#pragma once
-
-#include <algorithm>
-#include <functional>
-#include <string>
-#include <vector>
-
-#include "base/utf_string_conversions.h"
-#include "unicode/coll.h"
-
-namespace l10n_util {
-
-// Compares the two strings using the specified collator.
-UCollationResult CompareString16WithCollator(const icu::Collator* collator,
- const string16& lhs,
- const string16& rhs);
-
-// Used by SortStringsUsingMethod. Invokes a method on the objects passed to
-// operator (), comparing the string results using a collator.
-template <class T, class Method>
-class StringMethodComparatorWithCollator
- : public std::binary_function<const string16&,
- const string16&,
- bool> {
- public:
- StringMethodComparatorWithCollator(icu::Collator* collator, Method method)
- : collator_(collator),
- method_(method) { }
-
- // Returns true if lhs preceeds rhs.
- bool operator() (T* lhs_t, T* rhs_t) {
- return CompareString16WithCollator(collator_, (lhs_t->*method_)(),
- (rhs_t->*method_)()) == UCOL_LESS;
- }
-
- private:
- icu::Collator* collator_;
- Method method_;
-};
-
-// Used by SortStringsUsingMethod. Invokes a method on the objects passed to
-// operator (), comparing the string results using <.
-template <class T, class Method>
-class StringMethodComparator : public std::binary_function<const string16&,
- const string16&,
- bool> {
- public:
- explicit StringMethodComparator(Method method) : method_(method) { }
-
- // Returns true if lhs preceeds rhs.
- bool operator() (T* lhs_t, T* rhs_t) {
- return (lhs_t->*method_)() < (rhs_t->*method_)();
- }
-
- private:
- Method method_;
-};
-
-// Sorts the objects in |elements| using the method |method|, which must return
-// a string. Sorting is done using a collator, unless a collator can not be
-// found in which case the strings are sorted using the operator <.
-template <class T, class Method>
-void SortStringsUsingMethod(const std::string& locale,
- std::vector<T*>* elements,
- Method method) {
- UErrorCode error = U_ZERO_ERROR;
- icu::Locale loc(locale.c_str());
- scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
- if (U_FAILURE(error)) {
- sort(elements->begin(), elements->end(),
- StringMethodComparator<T, Method>(method));
- return;
- }
-
- std::sort(elements->begin(), elements->end(),
- StringMethodComparatorWithCollator<T, Method>(collator.get(), method));
-}
-
-// Compares two elements' string keys and returns true if the first element's
-// string key is less than the second element's string key. The Element must
-// have a method like the follow format to return the string key.
-// const string16& GetStringKey() const;
-// This uses the locale specified in the constructor.
-template <class Element>
-class StringComparator : public std::binary_function<const Element&,
- const Element&,
- bool> {
- public:
- explicit StringComparator(icu::Collator* collator)
- : collator_(collator) { }
-
- // Returns true if lhs precedes rhs.
- bool operator()(const Element& lhs, const Element& rhs) {
- const string16& lhs_string_key = lhs.GetStringKey();
- const string16& rhs_string_key = rhs.GetStringKey();
-
- return StringComparator<string16>(collator_)(lhs_string_key,
- rhs_string_key);
- }
-
- private:
- icu::Collator* collator_;
-};
-
-// Specialization of operator() method for string16 version.
-template <>
-bool StringComparator<string16>::operator()(const string16& lhs,
- const string16& rhs);
-
-// In place sorting of |elements| of a vector according to the string key of
-// each element in the vector by using collation rules for |locale|.
-// |begin_index| points to the start position of elements in the vector which
-// want to be sorted. |end_index| points to the end position of elements in the
-// vector which want to be sorted
-template <class Element>
-void SortVectorWithStringKey(const std::string& locale,
- std::vector<Element>* elements,
- unsigned int begin_index,
- unsigned int end_index,
- bool needs_stable_sort) {
- DCHECK(begin_index < end_index &&
- end_index <= static_cast<unsigned int>(elements->size()));
- UErrorCode error = U_ZERO_ERROR;
- icu::Locale loc(locale.c_str());
- scoped_ptr<icu::Collator> collator(icu::Collator::createInstance(loc, error));
- if (U_FAILURE(error))
- collator.reset();
- StringComparator<Element> c(collator.get());
- if (needs_stable_sort) {
- stable_sort(elements->begin() + begin_index,
- elements->begin() + end_index,
- c);
- } else {
- sort(elements->begin() + begin_index, elements->begin() + end_index, c);
- }
-}
-
-template <class Element>
-void SortVectorWithStringKey(const std::string& locale,
- std::vector<Element>* elements,
- bool needs_stable_sort) {
- SortVectorWithStringKey<Element>(locale, elements, 0, elements->size(),
- needs_stable_sort);
-}
-
-} // namespace l10n_util
-
-#endif // APP_L10N_UTIL_COLLATOR_H_