import MemoiTarget from "./MemoiTarget.js";
/**
 * Library to instrument applications with the memoiprof profiling library.
 *
 * @param targetSig - The signature of the target funtion
 * @param id - Unique ID representing this function
 * @param reportDir - Path to the directory where the report will be saved (does not need trailing /)
 */
export default class MemoiProf {
    private target;
    private id;
    private reportDir;
    /**
     * Options for memoiprof.
     */
    private memoiprofOptions;
    constructor(target: MemoiTarget, id: string, reportDir: string);
    setSampling(samplingKind: SamplingKind, samplingRate: number): void;
    setPeriodicReporting(periodicReportKind: boolean, periodicReportRate: number): void;
    setCulling(cullingKind: boolean, cullingRatio: number): void;
    setApprox(approxKind: boolean, approxBits: number): void;
    /**
     * 		Profiles all calls of the target function. This includes making a single
     * wrapper for all calls and adding the memoization profiling code inside this
     * wrapper.
     * */
    profAll(): void;
    /**
     * 		Profiles each call to the target function separately. This includes
     * 	making a wrapper for each call and adding the memoization profiling code
     * 	inside the wrapper.
     * */
    profEach(): void;
    private memoiInstrumentWrapper;
    private memoiSetup;
    private memoiAddCallSiteInfo;
}
export declare enum SamplingKind {
    RANDOM = "random",
    FIXED = "fixed",
    OFF = "off"
}
/**
 * Class used to store memoiprof options.
 * */
export declare class MemoiprofOptions {
    private _samplingKind;
    private _samplingRate;
    private _periodicReportKind;
    private _periodicReportRate;
    private _cullingKind;
    private _cullingRatio;
    private _approxKind;
    private _approxBits;
    get samplingKind(): SamplingKind;
    get samplingRate(): number;
    get periodicReportKind(): boolean;
    get periodicReportRate(): number;
    get cullingKind(): boolean;
    get cullingRatio(): number;
    get approxKind(): boolean;
    get approxBits(): number;
    /**
     * Supported samplingKind values are: 'random', 'fixed', 'off'.
     * For 1/x sampling, samplingRate should be x.
     * */
    setSampling(samplingKind: SamplingKind, samplingRate: number): void;
    /**
     * Supported periodicReportKind values are: true, false.
     * periodicReportRate is the number of calls between writes of periodic reports.
     * */
    setPeriodicReporting(periodicReportKind: boolean, periodicReportRate: number): void;
    /**
     * Supported cullingKind values are: true, false.
     * cullingRatio is the threshold (% of calls) for printing to the JSON.
     * */
    setCulling(cullingKind: boolean, cullingRatio: number): void;
    /**
     * Supported approxKind values are: true, false.
     * */
    setApprox(approxKind: boolean, approxBits: number): void;
}
//# sourceMappingURL=MemoiProf.d.ts.map