Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8988)

Unified Diff: chrome/common/string_ordinal.h

Issue 8236002: Create StringOrdinal to allow placement of strings in sorted lists (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Modifying DropUnneededDigits logic and code review changes Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/string_ordinal.h
diff --git a/chrome/common/string_ordinal.h b/chrome/common/string_ordinal.h
new file mode 100644
index 0000000000000000000000000000000000000000..57f4ff67e0e6e59f5868589719cff543ee300f37
--- /dev/null
+++ b/chrome/common/string_ordinal.h
@@ -0,0 +1,72 @@
+// Copyright (c) 2011 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 CHROME_COMMON_STRING_ORDINAL_H_
+#define CHROME_COMMON_STRING_ORDINAL_H_
+#pragma once
+
+#include <string>
+
+// A StringOrdinal represents a specially-formatted string that can be used
+// for ordering. The StringOrdinal class has an unbounded dense strict total
+// order, which mean for any StringOrdinals a, b and c:
+//
+// - a < b and b < c implies a < c (transitivity);
+// - exactly one of a < b, b < a and a = b holds (trichotomy);
+// - if a < b, there is a StringOrdinal x such that a < x < b (density);
+// - there are StringOrdinals x and y such that x < a < y (unboundedness).
+//
+// This means that when StringOrdinal is used for sorting a list, if
+// any item changes its position in the list, only its StringOrinal value
+// has to change to represent the new order, and all the other older values
+// can stay the same.
+class StringOrdinal {
+ public:
+ // Create a StringOrdinal from the given string. It may be valid or invalid.
+ explicit StringOrdinal(const std::string& string_ordinal);
+
+ // Create an invalid StringOrdinal.
+ static StringOrdinal Invalid();
+
+ bool IsValid() const;
+
+ // All remaining functions can only be called if IsValid() holds.
+ // It is an error to call them if IsValid() is false.
+
+ // Ordering Functions
+
+ // Returns true iff |*this| < |other|.
+ bool LessThan(const StringOrdinal& other) const;
+
+ // Return true iff |*this| == |other| (i.e. this->LessThan(other) and
+ // other.LessThan(*this) are both false).
+ bool Equal(const StringOrdinal& other) const;
+
+ // Given |*this| != |other|, returns a StringOrdinal x such that
+ // min(|*this|, |other|) < x < max(|*this|, |other|). It is an error
+ // to call this function with |*this| == |other|.
+ StringOrdinal CreateBetween(const StringOrdinal& other) const;
+
+ // Returns a StringOrdinal x such that x < |*this|.
+ StringOrdinal CreateBefore() const;
+
+ // Returns a StringOrdinal x such that |*this| < x.
+ StringOrdinal CreateAfter() const;
+
+ // It is guaranteed that a StringOrdinal constructed from the returned
+ // string will be valid.
+ std::string ToString() const;
+
+ private:
+ // The value of the StringOrdinal.
+ std::string string_ordinal_;
+
+ // The validity of the StringOrdinal (is it of the format [a-z]*[b-z]),
+ // created to cache validity to prevent frequent recalculations.
+ bool is_valid_;
csharp 2011/10/20 14:35:32 As stated earlier in the review we can't make eith
+
+ // Use of copy constructor and default assignment for this class is allowed.
+};
+
+#endif // CHROME_COMMON_STRING_ORDINAL_H_

Powered by Google App Engine
This is Rietveld 408576698