UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TextRange.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
7
8namespace uLang
9{
10
20{
21public:
22 // Public Data Members
23
26
27 // Accessors
28
31 ULANG_FORCEINLINE bool IsValid() const { return _Row != uint32_invalid; }
32 ULANG_FORCEINLINE bool IsInvalid() const { return _Row == uint32_invalid; }
33
34 ULANG_FORCEINLINE bool operator==(const STextPosition& Other) const { return _Row == Other._Row && _Column == Other._Column; }
35 ULANG_FORCEINLINE bool operator!=(const STextPosition& Other) const { return _Row != Other._Row || _Column != Other._Column; }
36 ULANG_FORCEINLINE bool operator<=(const STextPosition& Other) const { return (_Row < Other._Row) || ((_Row == Other._Row) && (_Column <= Other._Column)); }
37 ULANG_FORCEINLINE bool operator< (const STextPosition& Other) const { return (_Row < Other._Row) || ((_Row == Other._Row) && (_Column < Other._Column)); }
38 ULANG_FORCEINLINE bool operator>=(const STextPosition& Other) const { return (_Row > Other._Row) || ((_Row == Other._Row) && (_Column >= Other._Column)); }
39 ULANG_FORCEINLINE bool operator> (const STextPosition& Other) const { return (_Row > Other._Row) || ((_Row == Other._Row) && (_Column > Other._Column)); }
40};
41
58{
59public:
60
61 // TODO-uLang: Revisit - Could use two STextPosition structures instead of four integers.
62
63 uint32_t BeginRow() const { return _Begin._Row; }
64 uint32_t BeginColumn() const { return _Begin._Column; }
65 uint32_t EndRow() const { return _End._Row; }
66 uint32_t EndColumn() const { return _End._Column; }
67
68 void SetBeginRow(uint32_t Row) { _Begin._Row = Row; }
70 void SetEndRow(uint32_t Row) { _End._Row = Row; }
72
73 // Construction
74
76 ULANG_FORCEINLINE STextRange(ENoInit) {} // Do nothing - use with care!
80
81 // Accessors
82
83 ULANG_FORCEINLINE STextPosition GetBegin() const { return _Begin; }
84 ULANG_FORCEINLINE STextPosition GetEnd() const { return _End; }
86 ULANG_FORCEINLINE void SetEnd(const STextPosition& End) { _End = End; }
87
90 ULANG_FORCEINLINE void Reset() { _Begin.Reset(); _End.Reset(); }
91 ULANG_FORCEINLINE bool IsEmpty() const { return (_Begin == _End); }
92 ULANG_FORCEINLINE bool IsOrdered() const { return (_Begin <= _End); }
93 ULANG_FORCEINLINE bool IsRowSingle() const { return _Begin._Row == _End._Row; }
94 ULANG_FORCEINLINE bool IsRowMulti() const { return _Begin._Row != _End._Row; }
95 ULANG_FORCEINLINE bool IsInvalid() const { return _Begin._Row == uint32_invalid; }
96 ULANG_FORCEINLINE bool IsValid() const { return _Begin._Row != uint32_invalid; }
97 ULANG_FORCEINLINE bool IsInvalidEnd() const { return _End._Row == uint32_invalid; }
98 ULANG_FORCEINLINE bool IsValidEnd() const { return _End._Row != uint32_invalid; }
99
100 // Comparisons
101
102 ULANG_FORCEINLINE bool operator==(const STextRange & Other) const { return (_Begin == Other._Begin && _End == Other._End); }
103 ULANG_FORCEINLINE bool operator!=(const STextRange & Other) const { return (_Begin != Other._Begin || _End != Other._End); }
104
105 ULANG_FORCEINLINE bool Overlaps(const STextRange& Other) const { return CMath::Max(_Begin, Other._Begin) < CMath::Min(_End, Other._End); } // = "there is at least one byte of overlap"
106 ULANG_FORCEINLINE bool IsContainedIn(const STextRange& ContainingRange) const { return _Begin >= ContainingRange._Begin && _Begin <= ContainingRange._End && _End >= ContainingRange._Begin && _End <= ContainingRange._End; } // = "no character of this is outside of ContainingRange"
107
108 ULANG_FORCEINLINE bool IsInRange(const STextPosition& Position) const { return _Begin <= Position && Position < _End; }
109 ULANG_FORCEINLINE bool IsInRangeInclusive(const STextPosition& Position) const { return _Begin <= Position && Position <= _End; }
110
111 // Operations
112
113 // Compute the union of two text ranges
115 {
116 return STextRange(
117 _Begin < Other._Begin ? _Begin : Other._Begin,
118 _End > Other._End ? _End : Other._End);
119 }
120
121 // Make this text range the union of this and another
123 {
124 if (Other._Begin < _Begin)
125 {
126 _Begin = Other._Begin;
127 }
128
129 if (Other._End > _End)
130 {
131 _End = Other._End;
132 }
133
134 return *this;
135 }
136
137private:
138
139 // Beginning position (zero-based, inclusive)
140 STextPosition _Begin;
141
142 // End position (zero-based, exclusive)
143 STextPosition _End;
144
145}; // STextRange
146
147}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ULANG_FORCEINLINE
Definition Common.h:188
static ULANG_FORCEINLINE constexpr T Max(const T A, const T B)
Returns higher value in a generic way.
Definition MathUtils.h:19
static ULANG_FORCEINLINE constexpr T Min(const T A, const T B)
Returns lower value in a generic way.
Definition MathUtils.h:26
Definition VVMEngineEnvironment.h:23
ENoInit
Enum used in constructors to indicate they should not initialize anything.
Definition Common.h:375
const uint32_t uint32_invalid
Default size for uLang Boolean Type.
Definition Common.h:333
Definition TextRange.h:20
ULANG_FORCEINLINE bool operator<(const STextPosition &Other) const
Definition TextRange.h:37
ULANG_FORCEINLINE bool operator>=(const STextPosition &Other) const
Definition TextRange.h:38
ULANG_FORCEINLINE bool operator==(const STextPosition &Other) const
Definition TextRange.h:34
ULANG_FORCEINLINE bool operator!=(const STextPosition &Other) const
Definition TextRange.h:35
ULANG_FORCEINLINE bool IsValid() const
Definition TextRange.h:31
uint32_t _Row
Definition TextRange.h:24
uint32_t _Column
Definition TextRange.h:25
ULANG_FORCEINLINE bool operator<=(const STextPosition &Other) const
Definition TextRange.h:36
ULANG_FORCEINLINE void Reset()
Definition TextRange.h:30
ULANG_FORCEINLINE bool IsInvalid() const
Definition TextRange.h:32
ULANG_FORCEINLINE bool operator>(const STextPosition &Other) const
Definition TextRange.h:39
ULANG_FORCEINLINE void Invalidate()
Definition TextRange.h:29
Definition TextRange.h:58
ULANG_FORCEINLINE bool IsContainedIn(const STextRange &ContainingRange) const
Definition TextRange.h:106
ULANG_FORCEINLINE bool IsValid() const
Definition TextRange.h:96
ULANG_FORCEINLINE void InvalidateEnd()
Definition TextRange.h:89
ULANG_FORCEINLINE STextRange()
Definition TextRange.h:75
ULANG_FORCEINLINE bool operator!=(const STextRange &Other) const
Definition TextRange.h:103
ULANG_FORCEINLINE void Invalidate()
Definition TextRange.h:88
ULANG_FORCEINLINE STextRange(ENoInit)
Definition TextRange.h:76
ULANG_FORCEINLINE bool Overlaps(const STextRange &Other) const
Definition TextRange.h:105
ULANG_FORCEINLINE bool IsRowMulti() const
Definition TextRange.h:94
ULANG_FORCEINLINE bool IsInvalid() const
Definition TextRange.h:95
ULANG_FORCEINLINE STextPosition GetEnd() const
Definition TextRange.h:84
ULANG_FORCEINLINE void SetBegin(const STextPosition &Begin)
Definition TextRange.h:85
ULANG_FORCEINLINE STextRange(uint32_t BeginRow, uint32_t BeginColumn, uint32_t EndRow, uint32_t EndColumn)
Definition TextRange.h:77
ULANG_FORCEINLINE STextRange(const STextPosition &Begin, const STextPosition &End)
Definition TextRange.h:78
ULANG_FORCEINLINE bool IsInRange(const STextPosition &Position) const
Definition TextRange.h:108
uint32_t BeginRow() const
Definition TextRange.h:63
uint32_t EndColumn() const
Definition TextRange.h:66
ULANG_FORCEINLINE bool IsInRangeInclusive(const STextPosition &Position) const
Definition TextRange.h:109
uint32_t BeginColumn() const
Definition TextRange.h:64
ULANG_FORCEINLINE void Reset()
Definition TextRange.h:90
void SetEndRow(uint32_t Row)
Definition TextRange.h:70
ULANG_FORCEINLINE bool IsOrdered() const
Definition TextRange.h:92
ULANG_FORCEINLINE bool IsEmpty() const
Definition TextRange.h:91
ULANG_FORCEINLINE bool operator==(const STextRange &Other) const
Definition TextRange.h:102
ULANG_FORCEINLINE STextRange(const STextPosition &BeginAndEnd)
Definition TextRange.h:79
ULANG_FORCEINLINE bool IsInvalidEnd() const
Definition TextRange.h:97
void SetEndColumn(uint32_t Col)
Definition TextRange.h:71
uint32_t EndRow() const
Definition TextRange.h:65
ULANG_FORCEINLINE bool IsValidEnd() const
Definition TextRange.h:98
ULANG_FORCEINLINE STextRange & operator|=(const STextRange &Other)
Definition TextRange.h:122
ULANG_FORCEINLINE STextPosition GetBegin() const
Definition TextRange.h:83
ULANG_FORCEINLINE STextRange operator|(const STextRange &Other) const
Definition TextRange.h:114
void SetBeginColumn(uint32_t Col)
Definition TextRange.h:69
ULANG_FORCEINLINE bool IsRowSingle() const
Definition TextRange.h:93
void SetBeginRow(uint32_t Row)
Definition TextRange.h:68
ULANG_FORCEINLINE void SetEnd(const STextPosition &End)
Definition TextRange.h:86