///
import { PosBuffer, ReaderState, FieldOptions, DataTypeCtor, Mode, Spec } from '..';
import { TypeOptions } from '../pos_buffer/pos_buffer';
export declare type Predicate = (r: any) => boolean;
export declare type ValueProvider = (r: any) => Primitive;
export declare type Primitive = number | string | boolean | Buffer;
export interface Instruction {
execute(buffer: PosBuffer, readerState: ReaderState): T | undefined;
write(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare abstract class ValueProducer implements Instruction> {
options: FieldOptions | undefined;
constructor(options: FieldOptions | undefined);
abstract execute(buffer: PosBuffer, readerState: ReaderState): Primitive | Array | undefined;
abstract write(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare abstract class NamedValueProducer extends ValueProducer {
protected _name: string;
options: FieldOptions | undefined;
constructor(_name: string, options: FieldOptions | undefined);
abstract execute(buffer: PosBuffer, readerState: ReaderState): Primitive | Array | undefined;
write(buffer: PosBuffer, readerState: ReaderState): void;
protected resolveOptions(readerState: ReaderState): TypeOptions | undefined;
private resolveOption;
get name(): string;
}
export declare class Value extends NamedValueProducer {
private Type;
private _shouldBe;
constructor(_name: string, Type: DataTypeCtor, options: FieldOptions | undefined);
execute(buffer: PosBuffer, readerState: ReaderState): Primitive | undefined;
write(buffer: PosBuffer, readerState: ReaderState): void;
check(value: any): void;
}
export declare class Calculation extends NamedValueProducer {
private callback;
constructor(_name: string, callback: ValueProvider);
execute(buffer: PosBuffer, readerState: ReaderState): Primitive;
}
export declare class Literal extends NamedValueProducer {
private value;
constructor(name: string, options?: FieldOptions);
execute(buffer: PosBuffer, readerState: ReaderState): Primitive;
}
export declare class IfInstruction extends ValueProducer {
private predicate;
private otherSpec;
constructor(predicate: Predicate, otherSpec: Spec);
execute(buffer: PosBuffer, readerState: ReaderState): any;
write(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare class LookupInstruction extends ValueProducer {
private valueProvider;
private valueMap;
constructor(valueProvider: ValueProvider, valueMap: {
[k: string]: Spec;
});
execute(buffer: PosBuffer, readerState: ReaderState): any;
write(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare class LoopInstruction extends NamedValueProducer {
private repeat;
private loopSpec;
constructor(_name: string, repeat: number | ((r: any) => number) | null, loopSpec: Spec);
execute(buffer: PosBuffer, readerState: ReaderState): Array;
write(buffer: PosBuffer, readerState: ReaderState): void;
get name(): string;
}
export declare class IncludeInstruction extends ValueProducer {
private includedSpec;
constructor(includedSpec: Spec);
execute(buffer: PosBuffer, readerState: ReaderState): any;
write(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare class GroupInstruction extends NamedValueProducer {
private includedSpec;
constructor(_name: string, includedSpec: Spec);
execute(buffer: PosBuffer, readerState: ReaderState): any;
write(buffer: PosBuffer, readerState: ReaderState): void;
}
declare abstract class NullInstruction implements Instruction {
abstract execute(buffer: PosBuffer, readerState: ReaderState): void;
write(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare class SkipInstruction extends NullInstruction {
private bytes;
constructor(bytes: number);
execute(buffer: PosBuffer, reader: ReaderState): void;
}
export declare class EndiannessInstruction extends NullInstruction {
mode: Mode;
constructor(mode: Mode);
execute(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare class PadInstruction extends NullInstruction {
execute(buffer: PosBuffer, readerState: ReaderState): void;
}
export declare class TapInstruction extends NullInstruction {
private callback;
constructor(callback: (buffer: PosBuffer, readerState: ReaderState) => void);
execute(buffer: PosBuffer, readerState: ReaderState): void;
}
export {};