/
EvilBeaver
/
OneScript
Обзор
Документация
Войти
/
EvilBeaver
/
OneScript
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
v2.0.1
src/OneScript.StandardLibrary/Collections/MapImpl.cs
136 строк
4 KB
EvilBeaver
Удален устаревший метод OnAttach и массово исправлены неиспользуемые using
02 дек 2025, 11:20
02 дек 2025, 11:20
0301fed
Код
Авторство
О чём код?
/*---------------------------------------------------------- This Source Code Form is subject to the terms of the Mozilla Public License, v.2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. ----------------------------------------------------------*/ using System.Collections.Generic; using OneScript.Contexts; using ScriptEngine.Machine; using ScriptEngine.Machine.Contexts; namespace OneScript.StandardLibrary.Collections { /// <summary> /// Стандартный ассоциативный массив (словарь), соответствие вида Ключ->Значение. /// Ключом данной коллекции может выступать произвольный объект. /// Доступен обход в цикле <c>Для Каждого Из</c>, элементами коллекции выступают объекты вида <see cref="KeyAndValueImpl">КлючИЗначение</see>. /// </summary> /// <seealso cref="KeyAndValueImpl"/> [ContextClass("Соответствие", "Map")] public class MapImpl : AutoCollectionContext<MapImpl, KeyAndValueImpl> { private readonly Dictionary<IValue, IValue> _content = new Dictionary<IValue, IValue>(new GenericIValueComparer()); public MapImpl() { } public MapImpl(IEnumerable<KeyAndValueImpl> source) { foreach (var kv in source) { _content.Add(kv.Key, kv.Value); } } public override bool IsIndexed => true; public override IValue GetIndexedValue(IValue index) { IValue result; if (!_content.TryGetValue(index, out result)) { result = ValueFactory.Create(); } return result; } public override void SetIndexedValue(IValue index, IValue val) { _content[index] = val; } public override bool IsPropReadable(int propNum) { return false; } public override bool IsPropWritable(int propNum) { return false; } internal bool ContainsKey(IValue key) { return _content.ContainsKey(key); } public IEnumerable<IValue> Keys() { foreach (var key in _content.Keys) { yield return key; } } #region ICollectionContext Members [ContextMethod("Вставить", "Insert")] public void Insert(IValue key, IValue val = null) { SetIndexedValue(key, val ?? ValueFactory.Create() ); } [ContextMethod("Получить", "Get")] public IValue Retrieve(IValue key) { return GetIndexedValue(key); } [ContextMethod("Количество", "Count")] public override int Count() { return _content.Count; } [ContextMethod("Очистить", "Clear")] public void Clear() { _content.Clear(); } [ContextMethod("Удалить", "Delete")] public void Delete(IValue key) { _content.Remove(key); } #endregion #region IEnumerable<IValue> Members public override IEnumerator<KeyAndValueImpl> GetEnumerator() { foreach (var item in _content) { yield return new KeyAndValueImpl(item.Key, item.Value); } } #endregion [ScriptConstructor] public static MapImpl Constructor() { return new MapImpl(); } [ScriptConstructor(Name = "Из фиксированного соответствия")] public static MapImpl Constructor(FixedMapImpl source) { return new MapImpl(source); } } }