/** * Copyright (c) 2018 Mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal */ import { Expression } from '../../language/expression.js'; import { QueryContext, QueryFn } from '../../../mol-model/structure.js'; import { MSymbol } from '../../language/symbol.js'; import { CustomPropertyDescriptor } from '../../../mol-model/custom-property.js'; export declare class QueryRuntimeTable { private map; removeSymbol(runtime: QuerySymbolRuntime): void; addSymbol(runtime: QuerySymbolRuntime): void; addCustomProp(desc: CustomPropertyDescriptor): void; removeCustomProp(desc: CustomPropertyDescriptor): void; getRuntime(id: string): QuerySymbolRuntime | undefined; } export declare const DefaultQueryRuntimeTable: QueryRuntimeTable; export declare class QueryCompilerCtx { table: QueryRuntimeTable; constQueryContext: QueryContext; constructor(table: QueryRuntimeTable); } export type ConstQuerySymbolFn = (ctx: QueryContext, args: QueryRuntimeArguments) => any; export type QuerySymbolFn = (ctx: QueryContext, args: QueryRuntimeArguments) => any; export type QueryCompiledSymbolRuntime = { kind: 'const'; value: any; } | { kind: 'dynamic'; runtime: QuerySymbolFn; }; export type CompiledQueryFn = { isConst: boolean; fn: QueryFn; }; export declare namespace QueryCompiledSymbol { function Const(value: any): QueryCompiledSymbolRuntime; function Dynamic(runtime: QuerySymbolFn): QueryCompiledSymbolRuntime; } export declare namespace CompiledQueryFn { function Const(value: any): CompiledQueryFn; function Dynamic(fn: QueryFn): CompiledQueryFn; } export interface QuerySymbolRuntime { symbol: MSymbol; compile(ctx: QueryCompilerCtx, args?: Expression.Arguments): CompiledQueryFn; } export type QueryRuntimeArguments = { length?: number; } & { [P in keyof S['args']['@type']]: QueryFn; }; export declare namespace QueryRuntimeArguments { function forEachEval(xs: QueryRuntimeArguments, queryCtx: QueryContext, f: (arg: any, i: number, ctx: Ctx) => void, ctx: Ctx): Ctx; } export declare namespace QuerySymbolRuntime { function Const>(symbol: S, fn: ConstQuerySymbolFn): QuerySymbolRuntime; function Dynamic>(symbol: S, fn: QuerySymbolFn): QuerySymbolRuntime; } export declare function compile(expression: Expression): QueryFn;