/* * SPDX-License-Identifier: AGPL-3.0-or-later * Copyright (C) 2025 Sergej Görzen * This file is part of xAPI4Unity. */ #if UNITY_EDITOR using System.Collections.Generic; namespace xAPI4Unity.Editor.Parser.Definitions { /// /// List of xAPIDefinition objects /// /// Type of definition internal class xAPIDefinitionsList where T : xAPIDefinition { /// /// Name of the list /// public string Name { get; } /// /// Sub lists of definitions /// public readonly IDictionary> SubDefinitions = new Dictionary>(); /// /// List of definitions /// public readonly List Definitions = new List(); public int Count => Definitions.Count; public int SubCount => SubDefinitions.Count; public int DeepCount => Count + SubCount; /// /// Adds a definition /// /// Definition /// True, if it was successfully added, false, if not public bool AddDefinition(T definition) { var added = false; if (definition != null && (added = !Definitions.Contains(definition))) { Definitions.Add(definition); } return added; } /// /// Adds a list of sub definitions /// /// Name of the list /// Definitions /// Number of added definitions public bool AddDefinitions(string name, xAPIDefinitionsList definitions) { var added = false; if (definitions == null) return added; if (added = !SubDefinitions.ContainsKey(name)) { SubDefinitions.Add(name, definitions); } return added; } /// /// Adds a list of sub definitions /// /// Name of the list /// Definitions /// Number of added definitions public bool AddSubDefinition(string name, T definition) { if (definition == null) return false; if (SubDefinitions.ContainsKey(name)) SubDefinitions[name].AddDefinition(definition); else { var list = new xAPIDefinitionsList(); list.AddDefinition(definition); SubDefinitions.Add(name, list); } return true; } } } #endif