# Object TPointerView

Description
Hierarchy
Nested Types
Fields
Methods
Properties

## Unit

bbutils

## Declaration

`type generic TPointerView<TElement> = object(TObject)`

## Description

An array view representing a slice (subsequence) of an array.

The view is read-only and can only shrink. Methods with pointer arguments are safe, such that pointers outside the view either yield an empty view or keep the view unchanged.

Methods Move* remove elements from the beginning, methods Cut* remove elements from the end, i.e.:

    |----------leftOf(x)---------||--------------------rightWith(x)-----------------|
    ppppppppppppppppppppppppppppppxxxxxxxxxxxxxxxxxxxxxxsssssssssssssssssssssssssssss  <- the initial array view
    |-------------------leftWith(x)--------------------||---------rightOf(x)--------|

Methods View* return a new view. To and From are inclusive, while Until and After are exclusive, i.e.:

    |--------viewLeftOf(x)-------||------------------viewRightWith(x)---------------|
    ppppppppppppppppppppppppppppppxxxxxxxxxxxxxxxxxxxxxxsssssssssssssssssssssssssssss  <- the initial array view
    |-------------------viewLeftWith(x)----------------||---------rightOf(x)--------|

To avoid confusion, whether indices should be 0-based or 1-based, signed or unsigned, most methods of this view are specified without refering to indices. Rather they use pointers or an amount of elements. E.g. rather than getting a slice of all elements after index k, you use moveBy to remove the first k elements.

## Hierarchy

- TObject
- TPointerView

## Overview

### Nested Types

| `PElement = ˆTElement;`
| `TElementToString = function (const e: TElement): string;`

### Fields

| `data: pelement;`
| `dataend: pelement;`

### Methods

| `procedure init(firstelement: PElement; length: sizeint);`
| `procedure init(firstelement, behindlastelement: PElement);`
| `procedure init(const a: array of TElement);`
| `function length: SizeInt;`
| `function isEmpty: boolean; inline;`
| `function isEqual(const other: TPointerView): boolean;`
| `function isEqual(const other: array of telement): boolean;`
| `function isInBounds(target: PElement): boolean; inline;`
| `function isOnBounds(target: PElement): boolean; inline;`
| `function getEnumerator: TPointerViewEnumerator; inline;`
| `function rightOfFirst(delta: SizeUInt): boolean;`
| `function rightWithLast(alength: SizeUInt): boolean;`
| `procedure rightWith(target: PElement);`
| `procedure rightOf(target: PElement);`
| `function leftOfLast(delta: SizeUInt): boolean;`
| `function leftWithFirst(alength: SizeUInt): boolean;`
| `procedure leftOf(target: PElement);`
| `procedure leftWith(target: PElement);`
| `function count(const e: TElement): SizeUInt;`
| `function joinToString(elementMap: TElementToString; const sep: string): string;`
| `function viewLeftWith(newLast: PElement): TPointerView;`
| `function viewLeftOf(newEnd: PElement): TPointerView;`
| `function viewRightWith(newStart: PElement): TPointerView;`
| `function viewRightOf(newStartSkip: PElement): TPointerView;`

## Description

### Nested Types

| `PElement = ˆTElement;`

| `TElementToString = function (const e: TElement): string;`

### Fields

| `data: pelement;`

| `dataend: pelement;`

### Methods

| `procedure init(firstelement: PElement; length: sizeint);`
Creates a view starting with an element of certain length.

| `procedure init(firstelement, behindlastelement: PElement);`
Creates a view starting with an element (inclusive) until another element (exclusive).

| `procedure init(const a: array of TElement);`
Creates a view for a (dynamic) array.

| `function length: SizeInt;`
Number of elements in the view.

| `function isEmpty: boolean; inline;`
Tests whether the length zero.

| `function isEqual(const other: TPointerView): boolean;`
Tests whether this view is equal to another view (same length and elements) (currently undefined if element is a string).

| `function isEqual(const other: array of telement): boolean;`
Tests whether this view is equal to another view (same length and elements) (currently undefined if element is a string).

| `function isInBounds(target: PElement): boolean; inline;`
Tests whether an element is in the view (0 <= index < length).

| `function isOnBounds(target: PElement): boolean; inline;`
Tests whether an element is on the view (0 <= index <= length).

| `function getEnumerator: TPointerViewEnumerator; inline;`
Enumerates all elements, copying each.

| `function rightOfFirst(delta: SizeUInt): boolean;`
Removes delta many elements from the beginning.

| `function rightWithLast(alength: SizeUInt): boolean;`
Take the last length elements

| `procedure rightWith(target: PElement);`
Removes all elements before the target element.

| `procedure rightOf(target: PElement);`
Removes all elements before the target element and the target element.

| `function leftOfLast(delta: SizeUInt): boolean;`
Removes delta many elements from the end.

| `function leftWithFirst(alength: SizeUInt): boolean;`
Set the length to length

| `procedure leftOf(target: PElement);`
Removes all elements after the target element and the target element.

| `procedure leftWith(target: PElement);`
Removes all elements after the target element.

| `function count(const e: TElement): SizeUInt;`
`Count` how often an element occurs.

| `function joinToString(elementMap: TElementToString; const sep: string): string;`

| `function viewLeftWith(newLast: PElement): TPointerView;`
copy and leftWith.

| `function viewLeftOf(newEnd: PElement): TPointerView;`
copy and leftOf.

| `function viewRightWith(newStart: PElement): TPointerView;`
copy and rightWith.

| `function viewRightOf(newStartSkip: PElement): TPointerView;`
copy and rightOf.

Generated by PasDoc 0.16.0.