Skip to content
Snippets Groups Projects
Commit 38031818 authored by David Sehnal's avatar David Sehnal
Browse files

Element and Bond loci

parent fdb62e6a
No related branches found
No related tags found
No related merge requests found
/** /**
* Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
* *
* @author David Sehnal <david.sehnal@gmail.com> * @author David Sehnal <david.sehnal@gmail.com>
*/ */
...@@ -8,5 +8,6 @@ import Element from './structure/element' ...@@ -8,5 +8,6 @@ import Element from './structure/element'
import Structure from './structure/structure' import Structure from './structure/structure'
import Unit from './structure/unit' import Unit from './structure/unit'
import StructureSymmetry from './structure/symmetry' import StructureSymmetry from './structure/symmetry'
import { Bond } from './structure/unit/bonds'
export { Element, Structure, Unit, StructureSymmetry } export { Element, Bond, Structure, Unit, StructureSymmetry }
\ No newline at end of file \ No newline at end of file
...@@ -24,7 +24,7 @@ namespace Element { ...@@ -24,7 +24,7 @@ namespace Element {
/** All the information required to access element properties */ /** All the information required to access element properties */
export interface Location { unit: Unit, element: number } export interface Location { unit: Unit, element: number }
export function Location(): Location { return { unit: {} as any, element: 0 }; } export function Location(unit?: Unit, element?: number): Location { return { unit: unit as any, element: element || 0 }; }
export interface Property<T> { (location: Location): T } export interface Property<T> { (location: Location): T }
export interface Predicate extends Property<boolean> { } export interface Predicate extends Property<boolean> { }
...@@ -37,7 +37,18 @@ namespace Element { ...@@ -37,7 +37,18 @@ namespace Element {
export function property<T>(p: Property<T>) { return p; } export function property<T>(p: Property<T>) { return p; }
/** Represents multiple element locations */ /** Represents multiple element locations */
export type Loci = ReadonlyArray<{ unit: Unit, elements: SortedArray }> export interface Loci {
readonly kind: 'element-loci',
readonly elements: ReadonlyArray<{ unit: Unit, elements: SortedArray }>
}
export function Loci(elements: ArrayLike<{ unit: Unit, elements: SortedArray }>): Loci {
return { kind: 'element-loci', elements: elements as Loci['elements'] };
}
export function isLoci(x: any): x is Loci {
return !!x && x.kind === 'element-loci';
}
} }
export default Element export default Element
\ No newline at end of file
...@@ -4,5 +4,29 @@ ...@@ -4,5 +4,29 @@
* @author David Sehnal <david.sehnal@gmail.com> * @author David Sehnal <david.sehnal@gmail.com>
*/ */
import { Element } from '../../structure'
export * from './bonds/intra-data' export * from './bonds/intra-data'
export * from './bonds/intra-compute' export * from './bonds/intra-compute'
interface Bond {
readonly a: Readonly<Element.Location>,
readonly b: Readonly<Element.Location>
}
namespace Bond {
export interface Loci {
readonly kind: 'bond-loci',
readonly bonds: ReadonlyArray<Bond>
}
export function Loci(bonds: ArrayLike<Bond>): Loci {
return { kind: 'bond-loci', bonds: bonds as Loci['bonds'] };
}
export function isLoci(x: any): x is Loci {
return !!x && x.kind === 'bond-loci';
}
}
export { Bond }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment