UNPKG

@ontola/memoized-hash-factory

Version:

RDF Factory optimized for memory usage.

54 lines (53 loc) 2.06 kB
import { BlankNode, Comparable, DataFactory, Indexable, Literal, NamedNode, PlainFactory, Quad, Quadruple } from "@ontologies/core"; export declare type AnyRDFObject = BlankNode | NamedNode | Literal | Quad | Quadruple; declare type SomeNode = BlankNode | NamedNode; interface MemoizedHashFactoryInternals { memoizationMap: { [k: string]: AnyRDFObject; }; seedBase: number; } export interface DataFactoryArgs { bnIndex?: number; memoizationMap?: {}; seedBase?: number; } /** * RDF DataFactory which stores every value once at most. * * This version uses hashing which might be more CPU consuming but has deterministic id creation. */ export declare class MemoizedHashFactory extends PlainFactory implements DataFactory<AnyRDFObject>, MemoizedHashFactoryInternals { static FactorySupport: { COLLECTIONS: boolean; DEFAULT_GRAPH_TYPE: boolean; EQUALS_METHOD: boolean; ID: boolean; ID_STAMP: boolean; IDENTITY: boolean; REVERSIBLE_ID: boolean; VARIABLE_TYPE: boolean; }; bnIndex: number; /** * The seed is used as a modifiable base index. * We increase the number with a fixed amount per term type to generate different hashes for terms with the same * value but a different termType. */ seedBase: number; memoizationMap: { [k: string]: BlankNode | NamedNode | Literal | Quad; }; private readonly base; constructor(opts?: DataFactoryArgs); blankNode(value?: string): BlankNode; namedNode(value: string): NamedNode; defaultGraph(): NamedNode; literal(value: string | unknown, languageOrDatatype?: string | NamedNode): Literal; quad(subject: NamedNode | BlankNode, predicate: NamedNode, object: BlankNode | NamedNode | Literal, graph?: SomeNode): Quad; equals(a: Comparable, b: Comparable): boolean; fromId(id: Indexable): BlankNode | NamedNode | Literal | Quad; id(term: AnyRDFObject): number; } declare const _default: MemoizedHashFactory; export default _default;