microsoft/qdk
Publicmirrored from https://github.com/microsoft/qdkAvailable
source/npm/qsharp/src/data-structures/register.ts
52lines · modeblame
4192f29cMine Starks1 years ago | 1 | // Copyright (c) Microsoft Corporation. |
| 2 | // Licensed under the MIT license. | |
| 3 | | |
| 4 | /** | |
| 5 | * Type of register. | |
| 6 | */ | |
| 7 | export enum RegisterType { | |
| 8 | Qubit, | |
| 9 | Classical, | |
| 10 | } | |
| 11 | | |
| 12 | /** | |
| 13 | * Represents a register resource. | |
| 14 | */ | |
| 15 | export interface Register { | |
| 16 | /** Qubit register ID. */ | |
1287d30fScott Carda1 years ago | 17 | qubit: number; |
| 18 | /** Classical register ID. If present, register is classical register. */ | |
| 19 | result?: number; | |
4192f29cMine Starks1 years ago | 20 | } |
| 21 | | |
32f9dba0Scott Carda1 years ago | 22 | /** |
| 23 | * Runtime check: is this a valid Register? | |
| 24 | */ | |
| 25 | export function isRegister(obj: any): obj is Register { | |
| 26 | return ( | |
| 27 | obj && | |
| 28 | typeof obj === "object" && | |
| 29 | typeof obj.qubit === "number" && | |
| 30 | // result is optional, but if present must be a number | |
| 31 | (obj.result === undefined || typeof obj.result === "number") | |
| 32 | ); | |
| 33 | } | |
| 34 | | |
4192f29cMine Starks1 years ago | 35 | /** |
1693b257Scott Carda1 years ago | 36 | * Rendering data for qubit register. |
4192f29cMine Starks1 years ago | 37 | */ |
1693b257Scott Carda1 years ago | 38 | export interface RegisterRenderData { |
4192f29cMine Starks1 years ago | 39 | /** Type of register. */ |
| 40 | type: RegisterType; | |
| 41 | /** y coord of register */ | |
| 42 | y: number; | |
| 43 | /** Nested classical registers attached to quantum register. */ | |
1693b257Scott Carda1 years ago | 44 | children?: RegisterRenderData[]; |
4192f29cMine Starks1 years ago | 45 | } |
| 46 | | |
| 47 | /** | |
1693b257Scott Carda1 years ago | 48 | * Mapping from qubit IDs to their register render data. |
4192f29cMine Starks1 years ago | 49 | */ |
| 50 | export interface RegisterMap { | |
1693b257Scott Carda1 years ago | 51 | [id: number]: RegisterRenderData; |
4192f29cMine Starks1 years ago | 52 | } |