| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef UI_BASE_RANGE_RANGE_H_ | |
| 6 #define UI_BASE_RANGE_RANGE_H_ | |
| 7 | |
| 8 #include <ostream> | |
| 9 #include <string> | |
| 10 | |
| 11 #include "base/basictypes.h" | |
| 12 #include "ui/base/ui_export.h" | |
| 13 | |
| 14 #if defined(OS_MACOSX) | |
| 15 #if __OBJC__ | |
| 16 #import <Foundation/Foundation.h> | |
| 17 #else | |
| 18 typedef struct _NSRange NSRange; | |
| 19 #endif | |
| 20 #endif // defined(OS_MACOSX) | |
| 21 | |
| 22 #if defined(OS_WIN) | |
| 23 #include <windows.h> | |
| 24 #include <richedit.h> | |
| 25 #endif | |
| 26 | |
| 27 namespace ui { | |
| 28 | |
| 29 // A Range contains two integer values that represent a numeric range, like the | |
| 30 // range of characters in a text selection. A range is made of a start and end | |
| 31 // position; when they are the same, the Range is akin to a caret. Note that | |
| 32 // |start_| can be greater than |end_| to respect the directionality of the | |
| 33 // range. | |
| 34 class UI_EXPORT Range { | |
| 35 public: | |
| 36 // Creates an empty range {0,0}. | |
| 37 Range(); | |
| 38 | |
| 39 // Initializes the range with a start and end. | |
| 40 Range(size_t start, size_t end); | |
| 41 | |
| 42 // Initializes the range with the same start and end positions. | |
| 43 explicit Range(size_t position); | |
| 44 | |
| 45 // Platform constructors. | |
| 46 #if defined(OS_MACOSX) | |
| 47 explicit Range(const NSRange& range); | |
| 48 #elif defined(OS_WIN) | |
| 49 // The |total_length| paramater should be used if the CHARRANGE is set to | |
| 50 // {0,-1} to indicate the whole range. | |
| 51 Range(const CHARRANGE& range, LONG total_length = -1); | |
| 52 #endif | |
| 53 | |
| 54 // Returns a range that is invalid, which is {size_t_max,size_t_max}. | |
| 55 static const Range InvalidRange(); | |
| 56 | |
| 57 // Checks if the range is valid through comparision to InvalidRange(). | |
| 58 bool IsValid() const; | |
| 59 | |
| 60 // Getters and setters. | |
| 61 size_t start() const { return start_; } | |
| 62 void set_start(size_t start) { start_ = start; } | |
| 63 | |
| 64 size_t end() const { return end_; } | |
| 65 void set_end(size_t end) { end_ = end; } | |
| 66 | |
| 67 // Returns the absolute value of the length. | |
| 68 size_t length() const { | |
| 69 ptrdiff_t length = end() - start(); | |
| 70 return length >= 0 ? length : -length; | |
| 71 } | |
| 72 | |
| 73 bool is_reversed() const { return start() > end(); } | |
| 74 bool is_empty() const { return start() == end(); } | |
| 75 | |
| 76 // Returns the minimum and maximum values. | |
| 77 size_t GetMin() const; | |
| 78 size_t GetMax() const; | |
| 79 | |
| 80 bool operator==(const Range& other) const; | |
| 81 bool operator!=(const Range& other) const; | |
| 82 bool EqualsIgnoringDirection(const Range& other) const; | |
| 83 | |
| 84 // Returns true if this range intersects the specified |range|. | |
| 85 bool Intersects(const Range& range) const; | |
| 86 | |
| 87 // Returns true if this range contains the specified |range|. | |
| 88 bool Contains(const Range& range) const; | |
| 89 | |
| 90 // Computes the intersection of this range with the given |range|. | |
| 91 // If they don't intersect, it returns an InvalidRange(). | |
| 92 // The returned range is always empty or forward (never reversed). | |
| 93 Range Intersect(const Range& range) const; | |
| 94 | |
| 95 #if defined(OS_MACOSX) | |
| 96 Range& operator=(const NSRange& range); | |
| 97 | |
| 98 // NSRange does not store the directionality of a range, so if this | |
| 99 // is_reversed(), the range will get flipped when converted to an NSRange. | |
| 100 NSRange ToNSRange() const; | |
| 101 #elif defined(OS_WIN) | |
| 102 CHARRANGE ToCHARRANGE() const; | |
| 103 #endif | |
| 104 // GTK+ has no concept of a range. | |
| 105 | |
| 106 std::string ToString() const; | |
| 107 | |
| 108 private: | |
| 109 size_t start_; | |
| 110 size_t end_; | |
| 111 }; | |
| 112 | |
| 113 UI_EXPORT std::ostream& operator<<(std::ostream& os, const Range& range); | |
| 114 | |
| 115 } // namespace ui | |
| 116 | |
| 117 #endif // UI_BASE_RANGE_RANGE_H_ | |
| OLD | NEW |