@ontola/memoized-factory
Version:
RDF Factory with neat memory usage and good cpu performance.
59 lines (58 loc) • 2.02 kB
TypeScript
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;
};
}
export interface DataFactoryArgs {
bnIndex?: 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;
memoizationMap: {
[k: string]: BlankNode | NamedNode | Literal | Quadruple;
};
blankNodeMap: {
[k: string]: BlankNode;
};
namedNodeMap: {
[k: string]: NamedNode;
};
literalMap: {
[k: string]: Literal;
};
quadMap: {
[k: string]: Quad;
};
private readonly base;
private index;
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 | Quadruple;
id(term: AnyRDFObject): number;
private mapId;
}
declare const _default: MemoizedHashFactory;
export default _default;