import {InkListItem, SerializedInkListItem} from './InkList'; import {TryGetResult} from './TryGetResult'; export class ListDefinition{ public _name: string; public _items: Map | null; public _itemNameToValues: Map; constructor(name: string, items: Map | null){ this._name = name || ''; this._items = null; this._itemNameToValues = items || new Map(); } get name(){ return this._name; } get items(){ if (this._items == null){ this._items = new Map(); for (let [key, value] of this._itemNameToValues){ let item = new InkListItem(this.name, key); this._items.set(item.serialized(), value); } } return this._items; } public ValueForItem(item: InkListItem){ if (!item.itemName) return 0; let intVal = this._itemNameToValues.get(item.itemName); if (typeof intVal !== 'undefined') return intVal; else return 0; } public ContainsItem(item: InkListItem){ if (!item.itemName) return false; if (item.originName != this.name) return false; return this._itemNameToValues.has(item.itemName); } public ContainsItemWithName(itemName: string){ return this._itemNameToValues.has(itemName); } public TryGetItemWithValue(val: number, /* out */ item: InkListItem): TryGetResult{ for (let [key, value] of this._itemNameToValues){ if (value == val) { item = new InkListItem(this.name, key); return { result: item, exists: true }; } } item = InkListItem.Null; return { result: item, exists: false }; } public TryGetValueForItem(item: InkListItem, /* out */ intVal: number): TryGetResult{ if (!item.itemName) return { result: 0, exists: false }; let value = this._itemNameToValues.get(item.itemName); if (!value) return { result: 0, exists: false }; return { result: value, exists: true }; } }