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

Added id field to ValueBox

parent dbb9d5a3
No related branches found
No related tags found
No related merge requests found
...@@ -9,15 +9,25 @@ interface ValueCell<T> { value: T } ...@@ -9,15 +9,25 @@ interface ValueCell<T> { value: T }
/** Create a mutable value cell. */ /** Create a mutable value cell. */
function ValueCell<T>(value: T): ValueCell<T> { return { value }; } function ValueCell<T>(value: T): ValueCell<T> { return { value }; }
let _valueBoxId = 0;
function getNextId() {
return _valueBoxId++ % 0x7FFFFFFF;
}
/** An immutable value box that also holds a version of the attribute. */ /** An immutable value box that also holds a version of the attribute. */
interface ValueBox<T> { readonly version: number, readonly value: T } interface ValueBox<T> {
// Unique identifier in the range 0 to 0x7FFFFFFF
readonly id: number,
readonly version: number,
readonly value: T
}
/** Create a new box with the specified value and version = 0 */ /** Create a new box with the specified value and version = 0 */
function ValueBox<T>(value: T): ValueBox<T> function ValueBox<T>(value: T): ValueBox<T>
/** Create a new box by updating the value of an old box and incrementing the version number. */ /** Create a new box by updating the value of an old box and incrementing the version number. */
function ValueBox<T>(box: ValueBox<T>, value: T): ValueBox<T> function ValueBox<T>(box: ValueBox<T>, value: T): ValueBox<T>
function ValueBox<T>(boxOrValue: T | ValueBox<T>, value?: T): ValueBox<T> { function ValueBox<T>(boxOrValue: T | ValueBox<T>, value?: T): ValueBox<T> {
if (arguments.length === 2) return { version: (boxOrValue as ValueBox<T>).version + 1, value: value! }; if (arguments.length === 2) return { id: (boxOrValue as ValueBox<T>).id, version: (boxOrValue as ValueBox<T>).version + 1, value: value! };
return { version: 0, value: boxOrValue as T }; return { id: getNextId(), version: 0, value: boxOrValue as T };
} }
export { ValueCell, ValueBox }; export { ValueCell, ValueBox };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment