2021-04-22 18:51:48 +00:00
|
|
|
import { Encoder, EncoderState } from "./encoder";
|
2021-03-17 09:21:48 +00:00
|
|
|
import type { TypedDecoder } from "./decoder";
|
|
|
|
import type { Value } from "./values";
|
|
|
|
|
|
|
|
import { strip } from "./strip";
|
|
|
|
|
|
|
|
export class DefaultPointer {
|
|
|
|
v: Value<DefaultPointer>;
|
|
|
|
|
|
|
|
constructor(v: Value<DefaultPointer>) {
|
|
|
|
this.v = v;
|
|
|
|
}
|
|
|
|
|
|
|
|
equals(other: any, is: (a: any, b: any) => boolean) {
|
|
|
|
return Object.is(other.constructor, this.constructor) && is(this.v, other.v);
|
|
|
|
}
|
|
|
|
|
|
|
|
asPreservesText(): string {
|
|
|
|
return '#!' + this.v.asPreservesText();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function readDefaultPointer(v: Value<DefaultPointer>): DefaultPointer {
|
|
|
|
return new DefaultPointer(strip(v));
|
|
|
|
}
|
|
|
|
|
2021-04-22 18:51:48 +00:00
|
|
|
export function decodeDefaultPointer<T>(d: TypedDecoder<T>): DefaultPointer {
|
|
|
|
return readDefaultPointer(d.withPointerDecoder(decodeDefaultPointer, d => d.next()));
|
2021-03-17 09:21:48 +00:00
|
|
|
}
|
|
|
|
|
2021-04-22 18:51:48 +00:00
|
|
|
export function encodeDefaultPointer(e: EncoderState, w: DefaultPointer): void {
|
|
|
|
new Encoder(e, encodeDefaultPointer).push(w.v);
|
2021-03-17 09:21:48 +00:00
|
|
|
}
|