accelerator-core
Version:
[](https://travis-ci.org/furkleindustries/accelerator-core)
61 lines (48 loc) • 1.52 kB
text/typescript
import {Path} from './Path';
import {Container} from './Container';
import {InkObject} from './Object';
export class Pointer{
public container: Container | null = null;
public index: number = -1;
constructor();
constructor(container: Container | null, index: number)
constructor(){
if (arguments.length === 2) {
this.container = arguments[0];
this.index = arguments[1];
}
}
public Resolve(): InkObject | null{
if (this.index < 0) return this.container;
if (this.container == null) return null;
if (this.container.content.length == 0) return this.container;
if (this.index >= this.container.content.length) return null;
return this.container.content[this.index];
}
get isNull(): boolean{
return this.container == null;
}
get path(): Path | null{
if (this.isNull) return null;
if (this.index >= 0)
return this.container!.path.PathByAppendingComponent(new Path.Component(this.index));
else
return this.container!.path;
}
public toString(): string{
if (!this.container)
return 'Ink Pointer (null)';
return 'Ink Pointer -> ' + this.container.path.toString() + ' -- index ' + this.index;
}
// This method does not exist in the original C# code, but is here to maintain the
// value semantics of Pointer.
public copy(): Pointer{
return new Pointer(this.container, this.index);
}
public static StartOf(container: Container | null): Pointer{
return new Pointer(container, 0);
}
public static get Null(): Pointer {
return new Pointer(null, -1);
}
}