import type { CoreObjectType, ObjectContent } from './ObjectContent';
import type { CorePoint } from './entities/point/CorePoint';
import type { CoreVertex } from './entities/vertex/CoreVertex';
import type { BaseCoreObject } from './entities/object/BaseCoreObject';
import type { CorePrimitive } from './entities/primitive/CorePrimitive';
type BaseCorePointInstance = CorePoint<CoreObjectType>;
type BaseCorePointClassClass = typeof CorePoint<CoreObjectType>;
type BaseCoreVertexInstance = CoreVertex<CoreObjectType>;
type BaseCoreVertexClassClass = typeof CoreVertex<CoreObjectType>;
type BaseCorePrimitiveInstance = CorePrimitive<CoreObjectType>;
type BaseCorePrimitiveClassClass = typeof CorePrimitive<CoreObjectType>;
type BaseCoreObjectInstance = BaseCoreObject<CoreObjectType>;
type BaseCoreObjectClassClass = typeof BaseCoreObject<CoreObjectType>;
export type CorePointClassFactoryCheckFunction = (object: ObjectContent<CoreObjectType>) => BaseCorePointClassClass | undefined;
export type CorePointInstanceFactoryCheckFunction = (object: ObjectContent<CoreObjectType>, index: number) => BaseCorePointInstance | undefined;
export type CoreVertexClassFactoryCheckFunction = (object: ObjectContent<CoreObjectType>) => BaseCoreVertexClassClass | undefined;
export type CoreVertexInstanceFactoryCheckFunction = (object: ObjectContent<CoreObjectType>, index: number) => BaseCoreVertexInstance | undefined;
export type CorePrimitiveClassFactoryCheckFunction = (object: ObjectContent<CoreObjectType>) => BaseCorePrimitiveClassClass | undefined;
export type CorePrimitiveInstanceFactoryCheckFunction = (object: ObjectContent<CoreObjectType>, index: number) => BaseCorePrimitiveInstance | undefined;
export type CoreObjectClassFactoryCheckFunction = (object: ObjectContent<CoreObjectType>) => BaseCoreObjectClassClass | undefined;
export type CoreObjectInstanceFactoryCheckFunction = (object: ObjectContent<CoreObjectType>, index: number) => BaseCoreObjectInstance | undefined;
export interface CoreFactoryFunctions {
    pointClass: CorePointClassFactoryCheckFunction;
    pointInstance: CorePointInstanceFactoryCheckFunction;
    vertexClass: CoreVertexClassFactoryCheckFunction;
    vertexInstance: CoreVertexInstanceFactoryCheckFunction;
    primitiveClass: CorePrimitiveClassFactoryCheckFunction;
    primitiveInstance: CorePrimitiveInstanceFactoryCheckFunction;
    objectClass: CoreObjectClassFactoryCheckFunction;
    objectInstance: CoreObjectInstanceFactoryCheckFunction;
}
export declare function registerFactoryFunctions(checkFunctions: CoreFactoryFunctions): void;
export declare function corePointClassFactory(object: ObjectContent<CoreObjectType>): BaseCorePointClassClass;
export declare function corePointInstanceFactory<T extends CoreObjectType>(object: ObjectContent<T>, index?: number): CorePoint<T>;
export declare function coreVertexClassFactory(object: ObjectContent<CoreObjectType>): BaseCoreVertexClassClass;
export declare function coreVertexInstanceFactory<T extends CoreObjectType>(object: ObjectContent<T>, index?: number): CoreVertex<T>;
export declare function corePrimitiveClassFactory(object: ObjectContent<CoreObjectType>): BaseCorePrimitiveClassClass;
export declare function corePrimitiveInstanceFactory<T extends CoreObjectType>(object: ObjectContent<T>, index?: number): CorePrimitive<T>;
export declare function coreObjectClassFactory(object: ObjectContent<CoreObjectType>): BaseCoreObjectClassClass;
export declare function coreObjectInstanceFactory<T extends CoreObjectType>(object: ObjectContent<T>, index?: number): BaseCoreObject<T>;
export declare const ENTITY_CLASS_FACTORY: {
    point: typeof corePointClassFactory;
    vertex: typeof coreVertexClassFactory;
    primitive: typeof corePrimitiveClassFactory;
    object: typeof coreObjectClassFactory;
    coreGroup: null;
};
export declare const ENTITY_INSTANCE_FACTORY: {
    point: typeof corePointInstanceFactory;
    vertex: typeof coreVertexInstanceFactory;
    primitive: typeof corePrimitiveInstanceFactory;
    object: typeof coreObjectInstanceFactory;
    coreGroup: null;
};
export {};
