import '../../../../globals.js';
/**
 * Represents a string of WGSL code (which may have dependencies which it can add to a blueprint).
 *
 * @author Jonathan Olson <jonathan.olson@colorado.edu>
 */
import { BindingType, PipelineBlueprint, ResourceSlot } from '../../imports.js';
export default abstract class WGSLString {
    abstract withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLStringLiteral extends WGSLString {
    readonly value: string;
    constructor(value: string);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLStringFunction extends WGSLString {
    readonly value: (blueprint: PipelineBlueprint) => string;
    constructor(value: (blueprint: PipelineBlueprint) => string);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLStringAccumulator extends WGSLString {
    readonly values: WGSLString[];
    add(value: WGSLString): void;
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLModule extends WGSLString {
    readonly name: string;
    readonly declarations: WGSLModuleDeclarations;
    constructor(name: string, declarations: WGSLModuleDeclarations);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLMainModule extends WGSLModule {
    readonly slots: WGSLSlot[];
    constructor(slots: WGSLSlot[], declarations: WGSLModuleDeclarations);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLReferenceModule extends WGSLString {
    readonly name: string;
    readonly declarations: WGSLModuleDeclarations;
    constructor(name: string, declarations: WGSLModuleDeclarations);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLStringModule extends WGSLString {
    readonly name: string;
    readonly string: WGSLString;
    readonly declarations: WGSLModuleDeclarations;
    constructor(name: string, string: WGSLString, declarations: WGSLModuleDeclarations);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare class WGSLSlot extends WGSLModule {
    readonly slot: ResourceSlot;
    readonly bindingType: BindingType;
    constructor(name: string, slot: ResourceSlot, bindingType: BindingType);
    withBlueprint(blueprint: PipelineBlueprint): string;
}
export declare const wgslString: (value: string) => WGSLStringLiteral;
export declare const wgslFunction: (value: (blueprint: PipelineBlueprint) => string) => WGSLStringFunction;
export declare const wgslBlueprint: (value: (blueprint: PipelineBlueprint) => WGSLString) => WGSLStringFunction;
export declare const wgsl: (strings: TemplateStringsArray, ...values: WGSLString[]) => WGSLString;
export type WGSLExpression = WGSLString;
export type WGSLExpressionU32 = WGSLExpression;
export type WGSLExpressionI32 = WGSLExpression;
export type WGSLExpressionF32 = WGSLExpression;
export type WGSLExpressionBool = WGSLExpression;
export type WGSLExpressionT = WGSLExpression;
export type WGSLStatements = WGSLString;
export type WGSLModuleDeclarations = WGSLString;
export type WGSLVariableName = WGSLString;
export type WGSLType = WGSLString;
export type WGSLBinaryExpression = (a: WGSLExpression, b: WGSLExpression) => WGSLExpression;
export declare const decimalS: (n: number) => WGSLString;
export declare const u32S: (n: number) => WGSLExpressionU32;
export declare const u32HexS: (n: number) => WGSLExpressionU32;
export declare const i32S: (n: number) => WGSLExpressionI32;
export declare const i32HexS: (n: number) => WGSLExpressionI32;
export declare const f32S: (n: number) => WGSLExpressionF32;
export declare const wgslJoin: (separator: string, values: WGSLString[]) => WGSLString;
export declare const wgslMapJoin: <T>(separator: string, values: T[], mapper: (value: T) => WGSLString) => WGSLString;
export declare const wgslOneLine: (value: WGSLString) => WGSLString;
export declare const wgslWith: (value: WGSLString, ...modules: WGSLModule[]) => WGSLString;
//# sourceMappingURL=WGSLString.d.ts.map