Search
ctrl/
Ask AI
Light
Dark
System

Custom Datatypes

Represents an interval between values.

The Range type behaves the same as the EdgeDB range type. Ranges can have a lower and upper boundary, which can be inclusive or exclusive, or omitted completely (null). By default, the lower boundary is inclusive, and the upper boundary exclusive.

Depending on the type of the range, T, the range is either discrete or continuous. Discrete range types: Range<int> Continuous range types: Range<double>, Range<DateTime> Discrete ranges are normalised upon creation, such that the lower boundary becomes inclusive, and the upper boundary becomes exclusive.

If a range can contain no values, it is considered ‘empty’. Empty ranges are all considered equal to each other. An empty range can be created either by the Range.empty() constructor, creating a range where the lower and upper boundaries are equal, and at least one boundary is exclusive, or as the result of some operation on a range.

Copy
Range<T>(
  T? lower,
  T? upper, {
  bool? incLower,
  bool? incUpper, }
)

Creates a new Range.

If not given, incLower and incUpper default to true and false respectively.

Copy
Range<T>.empty()

Creates a new empty Range of type T.

Copy
int get hashCode

The hash code for this object.

Copy
bool get incLower

Whether the lower boundary is inclusive. Is always false for unspecified boundaries and empty ranges.

Copy
bool get incUpper

Whether the upper boundary is inclusive. Is always false for unspecified boundaries and empty ranges.

Copy
bool get isEmpty

Whether the range is empty.

Copy
T? get lower

The lower boundary of the range, if it exists.

Copy
T? get upper

The upper boundary of the range, if it exists.

Copy
int compareTo(
  Range<T> other
)

Compares this object to another object.

Returns a value like a Comparator when comparing this to other. That is, it returns a negative integer if this is ordered before other, a positive integer if this is ordered after other, and zero if this and other are ordered together.

The other argument must be a value that is comparable to this object.

Copy
bool contains(
  T element
)

Checks whether element is within this range.

Copy
bool containsRange(
  Range<T> range
)

Checks whether range is entirely within this range.

Copy
bool overlaps(
  Range<T> other
)

Checks whether other range overlaps this range.

Copy
dynamic toJSON()
Copy
String toString()

String representation of the range.

Inclusive boundaries are denoted by [] brackets, and exclusive boundaries by (). If the range is empty, returns the string 'empty'.

Copy
Iterable<T> unpack({
  Object? step, }
)

If the range is discrete and no step is provided, returns an Iterable of all values in the range. Otherwise returns an Iterable of each value starting at the lower bound, increasing by step up to the upper bound.

An error is thrown if the range is unbounded (ie. either lower or upper are null), or the step parameter is not given for non-discrete ranges.

Copy
Range<T> operator *(
  Range<T> other
)

Returns the intersection of two ranges.

Copy
Range<T> operator +(
  Range<T> other
)

Returns the union of two ranges.

Throws an error if the result is not a single continuous range.

Copy
Range<T> operator -(
  Range<T> other
)

Subtracts one range from another.

Throws an error if the result is not a single continuous range.

Copy
bool operator <(
  Range<T> other
)

Returns whether this range is before the other range.

A range is considered to be ordered before another range if its lower bound is lower than the other. If the lower bounds are equal, the upper bounds are checked. An empty range is considered lower than a non-empty range, and unspecified lower/upper bounds are considered lower/greater than specified lower/upper bounds respectively.

Copy
bool operator <=(
  Range<T> other
)

Returns whether this range is before or equal to the other range.

A range is considered to be ordered before another range if its lower bound is lower than the other. If the lower bounds are equal, the upper bounds are checked. An empty range is considered lower than a non-empty range, and unspecified lower/upper bounds are considered lower/greater than specified lower/upper bounds respectively.

Copy
bool operator ==(
  Object other
)

Returns whether two ranges are equal.

Copy
bool operator >(
  Range<T> other
)

Returns whether this range is after the other range.

A range is considered to be ordered after another range if its lower bound is greater than the other. If the lower bounds are equal, the upper bounds are checked. An empty range is considered lower than a non-empty range, and unspecified lower/upper bounds are considered lower/greater than specified lower/upper bounds respectively.

Copy
bool operator >=(
  Range<T> other
)

Returns whether this range is after or equal to the other range.

A range is considered to be ordered after another range if its lower bound is greater than the other. If the lower bounds are equal, the upper bounds are checked. An empty range is considered lower than a non-empty range, and unspecified lower/upper bounds are considered lower/greater than specified lower/upper bounds respectively.

Copy
MultiRange<T>(
  Iterable<Range<T>> ranges
)
Copy
int get hashCode

The hash code for this object.

Copy
Iterator<Range<T>> get iterator

An iterator that iterates over the elements of this set.

The order of iteration is defined by the individual Set implementation, but must be consistent between changes to the set.

Copy
int get length

The number of elements in this Iterable.

Counting all elements may involve iterating through all elements and can therefore be slow. Some iterables have a more efficient way to find the number of elements. These must override the default implementation of length.

Copy
bool add(
  Range<T> value
)

Adds value to the set.

Returns true if value (or an equal value) was not yet in the set. Otherwise returns false and the set is not changed.

Example:

Copy
final dateTimes = <DateTime>{};
final time1 = DateTime.fromMillisecondsSinceEpoch(0);
final time2 = DateTime.fromMillisecondsSinceEpoch(0);
// time1 and time2 are equal, but not identical.
assert(time1 == time2);
assert(!identical(time1, time2));
final time1Added = dateTimes.add(time1);
print(time1Added); // true
// A value equal to time2 exists already in the set, and the call to
// add doesn't change the set.
final time2Added = dateTimes.add(time2);
print(time2Added); // false

print(dateTimes); // {1970-01-01 02:00:00.000}
assert(dateTimes.length == 1);
assert(identical(time1, dateTimes.first));
print(dateTimes.length);
Copy
bool contains(
  Object? element
)

Whether value is in the set.

Copy
final characters = <String>{'A', 'B', 'C'};
final containsB = characters.contains('B'); // true
final containsD = characters.contains('D'); // false
Copy
Range<T>? lookup(
  Object? element
)

If an object equal to object is in the set, return it.

Checks whether object is in the set, like contains, and if so, returns the object in the set, otherwise returns null.

If the equality relation used by the set is not identity, then the returned object may not be identical to object. Some set implementations may not be able to implement this method. If the contains method is computed, rather than being based on an actual object instance, then there may not be a specific object instance representing the set element.

Copy
final characters = <String>{'A', 'B', 'C'};
final containsB = characters.lookup('B');
print(containsB); // B
final containsD = characters.lookup('D');
print(containsD); // null
Copy
bool remove(
  Object? value
)

Removes value from the set.

Returns true if value was in the set, and false if not. The method has no effect if value was not in the set.

Copy
final characters = <String>{'A', 'B', 'C'};
final didRemoveB = characters.remove('B'); // true
final didRemoveD = characters.remove('D'); // false
print(characters); // {A, C}
Copy
dynamic toJSON()
Copy
Set<Range<T>> toSet()

Creates a Set with the same elements and behavior as this Set.

The returned set behaves the same as this set with regard to adding and removing elements. It initially contains the same elements. If this set specifies an ordering of the elements, the returned set will have the same order.

Copy
String toString()

A string representation of this object.

Some classes have a default textual representation, often paired with a static parse function (like int.parse). These classes will provide the textual representation as their string representation.

Other classes have no meaningful textual representation that a program will care about. Such classes will typically override toString to provide useful information when inspecting the object, mainly for debugging or logging.

Copy
bool operator ==(
  Object other
)

Returns whether two multiranges are equal.

Represents an amount of memory in bytes.

Uses the base-2 KiB notation (1024 bytes), instead of the more ambiguous ‘kB’, which can mean 1000 or 1024 bytes.

Copy
ConfigMemory(
  int _bytes
)
Copy
ConfigMemory.parse(
  String mem
)
Copy
int get bytes
Copy
num get gibibytes
Copy
num get kibibytes
Copy
num get mebibytes
Copy
num get pebibytes
Copy
num get tebibytes
Copy
String toString()

A string representation of this object.

Some classes have a default textual representation, often paired with a static parse function (like int.parse). These classes will provide the textual representation as their string representation.

Other classes have no meaningful textual representation that a program will care about. Such classes will typically override toString to provide useful information when inspecting the object, mainly for debugging or logging.