/* MOD_V2.0 * Copyright (c) 2012 OpenDA Association * All rights reserved. * * This file is part of OpenDA. * * OpenDA is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * OpenDA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with OpenDA. If not, see . */ using System; using System.Collections; using System.Collections.Generic; using OpenMI.Standard2.TimeSpace; namespace OpenDA.DotNet.OpenMI.UnitTests.SimpleComponent { public class ValueSet : ITimeSpaceValueSet { private List> _values; public ValueSet(T value) { List elementValues = new List(); elementValues.Add(value); _values = new List>(); _values.Add(elementValues); } public int GetIndexCount(int[] indices) { if (indices == null || indices.Length == 0) return (Values2D.Count); if (indices.Length == 1) return (Values2D[indices[0]].Count); throw new ArgumentException("Indices does not have the correct length, length must be smaller than 2", "indices"); } public object GetValue(int[] indices) { if (indices.Length != 2) throw new ArgumentException("Indices does not have the correct length", "indices"); return (GetValue(indices[0], indices[1])); } public void SetValue(int[] indices, object value) { if (indices.Length != 2) throw new ArgumentException("Indices does not have the correct length", "indices"); SetValue(indices[0], indices[1], value); } public Type ValueType { get { return (typeof(T)); } } public int NumberOfIndices { get { return (2); } } public object GetValue(int timeIndex, int elementIndex) { CheckIndices(timeIndex, elementIndex); return Values2D[timeIndex][elementIndex]; } public void SetValue(int timeIndex, int elementIndex, object value) { if (!(value is T)) throw new ArgumentException("value is not of the correct type", "value"); Values2D[timeIndex][elementIndex] = value; } public IList GetTimeSeriesValuesForElement(int elementIndex) { return new List { _values[0][0] }; } public void SetTimeSeriesValuesForElement(int elementIndex, IList values) { _values[0] = new List {(T) values[0]}; } public IList GetElementValuesForTime(int timeIndex) { return new List { _values[0][0] }; } public void SetElementValuesForTime(int timeIndex, IList values) { _values[0] = new List { (T)values[0] }; } public IList Values2D { get { return TypedListToList(_values); } set { _values = ListToTypedList(value); } } private static IList TypedListToList(IEnumerable> typedList2D) { IList list2D = new List(); foreach (List typedTimeStepValues in typedList2D) { list2D.Add(typedTimeStepValues); } return list2D; } private static List> ListToTypedList(IEnumerable list2D) { List> typedList2D = new List>(); foreach (IList timeStepValues in list2D) { List typedTimeStepValues = new List(); foreach (IList value in timeStepValues) { typedTimeStepValues.Add((T) value); } typedList2D.Add(typedTimeStepValues); } return typedList2D; } private static void CheckIndices(int timeIndex, int elementIndex) { if (timeIndex != 0) { throw new Exception("Only one time step supported"); } if (elementIndex != 0) { throw new Exception("Only one element supported"); } } } }