Show / Hide Table of Contents

Class Area

Represents an arbitrarily-shaped 2D area. Stores and provides access to a list of each unique position in the area.

Inheritance
Object
Area
Implements
IReadOnlyArea
IMatchable<IReadOnlyArea>
IEnumerable<Point>
IEnumerable
Namespace: SadRogue.Primitives
Assembly: TheSadRogue.Primitives.dll
Syntax
public class Area : Object, IReadOnlyArea, IMatchable<IReadOnlyArea>, IEnumerable<Point>, IEnumerable

Constructors

Area(IEnumerable<Point>, IEqualityComparer<Point>)

Constructor that takes initial points to add to the area.

Declaration
public Area(IEnumerable<Point> initialPoints, IEqualityComparer<Point> pointHasher = null)
Parameters
Type Name Description
IEnumerable<Point> initialPoints

Initial points to add to the area.

IEqualityComparer<Point> pointHasher

A custom equality comparer/hashing algorithm to use when storing points. If not specified, it defaults to using the Equals and GetHashCode functions of the Point struct.

Area(IEqualityComparer<Point>)

Constructor.

Declaration
public Area(IEqualityComparer<Point> pointHasher = null)
Parameters
Type Name Description
IEqualityComparer<Point> pointHasher

A custom equality comparer/hashing algorithm to use when storing points. If not specified, it defaults to using the Equals and GetHashCode functions of the Point struct.

Area(IEqualityComparer<Point>, Point[])

Constructor that takes initial points to add to the area.

Declaration
public Area(IEqualityComparer<Point> pointHasher = null, params Point[] initialPoints)
Parameters
Type Name Description
IEqualityComparer<Point> pointHasher

A custom equality comparer/hashing algorithm to use when storing points. If not specified, it defaults to using the Equals and GetHashCode functions of the Point struct.

Point[] initialPoints

Initial points to add to the area.

Fields

PointHasher

Hashing algorithm being used to store points added to this area.

Declaration
public readonly IEqualityComparer<Point> PointHasher
Field Value
Type Description
IEqualityComparer<Point>

Properties

Bounds

Smallest possible rectangle that encompasses every position in the area.

Declaration
public Rectangle Bounds { get; }
Property Value
Type Description
Rectangle

Count

Number of (unique) positions in the area.

Declaration
public int Count { get; }
Property Value
Type Description
Int32

Item[Int32]

Returns positions from the area in the same fashion you would via a list.

Declaration
public Point this[int index] { get; }
Parameters
Type Name Description
Int32 index

Index of list to retrieve.

Property Value
Type Description
Point

UseIndexEnumeration

Whether or not it is more efficient for this implementation to use enumeration by index, rather than generic IEnumerable, when iterating over positions using ReadOnlyAreaPositionsEnumerator.

Declaration
public bool UseIndexEnumeration { get; }
Property Value
Type Description
Boolean
Remarks

Set this to true if your indexer implementation scales well (constant time), and is relatively fast. Implementations with more complex indexers should set this to false.

The default interface implementation returns false, in order to preserve backwards compatibility with previous versions.

If you set this to false, your IEnumerable.GetEnumerator() implementations must NOT call return a ReadOnlyAreaPositionsEnumerator, as this will create an infinite loop.

Methods

Add(IReadOnlyArea)

Adds all positions in the given map area to this one.

Declaration
public void Add(IReadOnlyArea area)
Parameters
Type Name Description
IReadOnlyArea area

Area containing positions to add.

Add(Point)

Adds the given position to the list of points within the area if it is not already in the list, or does nothing otherwise.

Declaration
public void Add(Point position)
Parameters
Type Name Description
Point position

The position to add.

Remarks

Because the class uses a hash set internally to determine what points have already been added, this is an average case O(1) operation.

Add(Rectangle)

Adds all positions in the given rectangle to the area, if they are not already present.

Declaration
public void Add(Rectangle rectangle)
Parameters
Type Name Description
Rectangle rectangle

Rectangle indicating which points to add.

Add(IEnumerable<Point>)

Adds the given positions to the list of points within the area if they are not already in the list.

Declaration
public void Add(IEnumerable<Point> positions)
Parameters
Type Name Description
IEnumerable<Point> positions

Positions to add to the list.

Add(Int32, Int32)

Adds the given position to the list of points within the area if it is not already in the list, or does nothing otherwise.

Declaration
public void Add(int positionX, int positionY)
Parameters
Type Name Description
Int32 positionX

X-value of the position to add.

Int32 positionY

Y-value of the position to add.

Remarks

Because the class uses a hash set internally to determine what points have already been added, this is an average case O(1) operation.

Contains(IReadOnlyArea)

Returns whether or not the given area is completely contained within the current one.

Declaration
public bool Contains(IReadOnlyArea area)
Parameters
Type Name Description
IReadOnlyArea area

Area to check.

Returns
Type Description
Boolean

True if the given area is completely contained within the current one, false otherwise.

Contains(Point)

Determines whether or not the given position is within the area or not.

Declaration
public bool Contains(Point position)
Parameters
Type Name Description
Point position

The position to check.

Returns
Type Description
Boolean

True if the specified position is within the area, false otherwise.

Contains(Int32, Int32)

Determines whether or not the given position is within the area or not.

Declaration
public bool Contains(int positionX, int positionY)
Parameters
Type Name Description
Int32 positionX

X-value of the position to check.

Int32 positionY

Y-value of the position to check.

Returns
Type Description
Boolean

True if the specified position is within the area, false otherwise.

GetDifference(IReadOnlyArea, IReadOnlyArea, IEqualityComparer<Point>)

Gets an area containing all positions in area1, minus those that are in area2.

Declaration
public static Area GetDifference(IReadOnlyArea area1, IReadOnlyArea area2, IEqualityComparer<Point> pointHasher = null)
Parameters
Type Name Description
IReadOnlyArea area1
IReadOnlyArea area2
IEqualityComparer<Point> pointHasher

A custom equality comparer/hashing algorithm to use when storing points in the new Area. If not specified, it defaults to using the Equals and GetHashCode functions of the Point struct.

Returns
Type Description
Area

A area with exactly those positions in area1 that are NOT in area2.

GetEnumerator()

Returns an enumerator that iterates through all positions in the Area, in the order they were added.

Declaration
public List<Point>.Enumerator GetEnumerator()
Returns
Type Description
List.Enumerator<>

An enumerator that iterates through all the positions in the Area, in the order they were added.

GetIntersection(IReadOnlyArea, IReadOnlyArea, IEqualityComparer<Point>)

Gets an area containing exactly those positions contained in both of the given areas.

Declaration
public static Area GetIntersection(IReadOnlyArea area1, IReadOnlyArea area2, IEqualityComparer<Point> pointHasher = null)
Parameters
Type Name Description
IReadOnlyArea area1
IReadOnlyArea area2
IEqualityComparer<Point> pointHasher

A custom equality comparer/hashing algorithm to use when storing points in the new Area. If not specified, it defaults to using the Equals and GetHashCode functions of the Point struct.

Returns
Type Description
Area

An area containing exactly those positions contained in both of the given areas.

GetUnion(IReadOnlyArea, IReadOnlyArea, IEqualityComparer<Point>)

Gets an area containing every position in one or both given areas.

Declaration
public static Area GetUnion(IReadOnlyArea area1, IReadOnlyArea area2, IEqualityComparer<Point> pointHasher = null)
Parameters
Type Name Description
IReadOnlyArea area1
IReadOnlyArea area2
IEqualityComparer<Point> pointHasher

A custom equality comparer/hashing algorithm to use when storing points in the new Area. If not specified, it defaults to using the Equals and GetHashCode functions of the Point struct.

Returns
Type Description
Area

An area containing only those positions in one or both of the given areas.

Intersects(IReadOnlyArea)

Returns whether or not the given map area intersects the current one. If you intend to determine/use the exact intersection based on this return value, it is best to instead call the GetIntersection(IReadOnlyArea, IReadOnlyArea, IEqualityComparer<Point>), and check the number of positions in the result (0 if no intersection).

Declaration
public bool Intersects(IReadOnlyArea area)
Parameters
Type Name Description
IReadOnlyArea area

The area to check.

Returns
Type Description
Boolean

True if the given map area intersects the current one, false otherwise.

Matches(IReadOnlyArea)

Compares for equality. Returns true if the two areas contain exactly the same points.

Declaration
public bool Matches(IReadOnlyArea other)
Parameters
Type Name Description
IReadOnlyArea other
Returns
Type Description
Boolean

True if the areas contain exactly the same points, false otherwise.

Remove(IReadOnlyArea)

Removes all positions in the given map area from this one.

Declaration
public void Remove(IReadOnlyArea area)
Parameters
Type Name Description
IReadOnlyArea area

Area containing positions to remove.

Remove(Point)

Removes the given position specified from the area. Particularly when the remove operation operation changes the bounds, this operation can be expensive, so if you must do multiple remove operations, it would be best to group them into 1 using Remove(IEnumerable<Point>).

Declaration
public void Remove(Point position)
Parameters
Type Name Description
Point position

The position to remove.

Remove(Rectangle)

Removes all positions in the given rectangle from this area.

Declaration
public void Remove(Rectangle rectangle)
Parameters
Type Name Description
Rectangle rectangle

Rectangle containing positions to remove.

Remove(HashSet<Point>)

Removes the given positions from the specified area.

Declaration
public void Remove(HashSet<Point> positions)
Parameters
Type Name Description
HashSet<Point> positions

Positions to remove.

Remove(IEnumerable<Point>)

Removes the given positions from the specified area.

Declaration
public void Remove(IEnumerable<Point> positions)
Parameters
Type Name Description
IEnumerable<Point> positions

Positions to remove.

Remove(Func<Point, Boolean>)

Removes positions for which the given predicate returns true from the area.

Declaration
public void Remove(Func<Point, bool> predicate)
Parameters
Type Name Description
Func<Point, Boolean> predicate

Predicate returning true for positions that should be removed.

Remove(Int32, Int32)

Removes the given position specified from the area. Particularly when the remove operation operation changes the bounds, this operation can be expensive, so if you must do multiple remove operations, it would be best to group them into 1 using Remove(IEnumerable<Point>).

Declaration
public void Remove(int positionX, int positionY)
Parameters
Type Name Description
Int32 positionX

X-value of the position to remove.

Int32 positionY

Y-value of the position to remove.

ToString()

Returns the string of each position in the area, in a square-bracket enclosed list, eg. [(1, 2), (3, 4), (5, 6)].

Declaration
public override string ToString()
Returns
Type Description
String

A string representation of those coordinates in the area.

Operators

Addition(Area, Point)

Creates an area with the positions all shifted by the given vector.

Declaration
public static Area operator +(Area lhs, Point rhs)
Parameters
Type Name Description
Area lhs
Point rhs

Vector to add to each position in lhs.

Returns
Type Description
Area

An area with the positions all translated by the given amount in x and y directions.

Implements

IReadOnlyArea
IMatchable<T>
System.Collections.Generic.IEnumerable<T>
System.Collections.IEnumerable

Extension Methods

PropertyChangedEventHelpers.SafelySetProperty<TObject, TProperty>(TObject, ref TProperty, TProperty, EventHandler<ValueChangedEventArgs<TProperty>>)
PropertyChangedEventHelpers.SafelySetProperty<TObject, TProperty>(TObject, ref TProperty, TProperty, EventHandler<ValueChangedEventArgs<TProperty>>, EventHandler<ValueChangedEventArgs<TProperty>>)
In This Article
Back to top Generated by DocFX