Parameter(string name, List <IParameterValue> vs) { UnitdefUtil.ArgumentMustNotBeEmpty(name, "name of parameter"); UnitdefUtil.ArgumentMustNotBeNull(vs, "list of parameter"); Name = name; Values = new NonNullCollection <IParameterValue>(vs.AsReadOnly()); }
/// <summary> /// コレクション内の指定された位置に新しい要素を挿入します。 /// </summary> /// <param name="self"></param> /// <param name="index">要素の添字</param> /// <param name="item">新しい要素</param> /// <exception cref="ArgumentOutOfRangeException">添字が範囲外の場合</exception> /// <exception cref="ArgumentNullException">setterの引数として<c>null</c>が指定された場合</exception> /// <exception cref="NotSupportedException">コレクションが読み取り専用の場合</exception> public static void Insert(this NonNullCollection <IParameterValue> self, int index, ITuple item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } self.Insert(index, TupleParameterValue.OfValue(item)); }
/// <summary> /// コレクションの読み取り専用のインスタンスを生成して返します。 /// </summary> /// <returns>読み取り専用のインスタンス</returns> public static NonNullCollection <IParameter> AsReadOnly(this NonNullCollection <IParameter> self) { if (self.IsReadOnly) { return(self); } return(new NonNullCollection <IParameter>(new List <IParameter>(self).AsReadOnly())); }
/// <summary> /// コレクションの末尾に新しい要素を追加します。 /// </summary> /// <param name="self"></param> /// <param name="item">新しい要素</param> /// <exception cref="ArgumentNullException">新しい要素として<c>null</c>が指定された場合</exception> /// <exception cref="NotSupportedException">コレクションが読み取り専用の場合</exception> public static void Add(this NonNullCollection <IParameterValue> self, ITuple item) { if (item == null) { throw new ArgumentNullException(nameof(item)); } self.Add(TupleParameterValue.OfValue(item)); }
/// <summary> /// コレクション内の指定された位置に新しい要素を挿入します。 /// </summary> /// <param name="self"></param> /// <param name="index">要素の添字</param> /// <param name="item">新しい要素</param> /// <param name="quoted">引用符付き文字列として追加する場合は<c>true</c></param> /// <exception cref="ArgumentOutOfRangeException">添字が範囲外の場合</exception> /// <exception cref="ArgumentNullException">setterの引数として<c>null</c>が指定された場合</exception> /// <exception cref="NotSupportedException">コレクションが読み取り専用の場合</exception> public static void Insert(this NonNullCollection <IParameterValue> self, int index, string item, bool quoted) { if (item == null) { throw new ArgumentNullException(nameof(item)); } self.Insert(index, quoted ? QuotedStringParameterValue.OfValue(item) : RawStringParameterValue.OfValue(item)); }
Unit(FullName fqn, Attributes attributes, IParameter ty, IParameter cm, List <IParameter> parameters, List <IUnit> subUnits) { _fqn = fqn; _name = attributes.UnitName; _attrs = attributes; _type = UnitType.FromName(ty.Values[0].StringValue); _comment = cm == null ? string.Empty : cm.Values[0].StringValue; Parameters = new NonNullCollection <IParameter>(parameters.AsReadOnly()); SubUnits = new NonNullCollection <IUnit>(subUnits.AsReadOnly()); }
/// <summary> /// 指定されたユニット定義パラメータで同名の既存のパラメータを置き換え、影響を被った既存の要素数を返します。 /// </summary> /// <returns>置き換えされた既存の要素の数</returns> /// <param name="self"></param> /// <param name="newParams">新しいパラメータ</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int ReplaceAll(this NonNullCollection <IParameter> self, IEnumerable <IParameter> newParams) { var paramNames = newParams.Select(p => p.Name).Distinct().ToArray(); Func <IParameter, bool> predicate = p => paramNames.Contains(p.Name); var removed = self.RemoveAll(predicate); foreach (var newParam in newParams) { self.Add(newParam); } return(removed); }
/// <summary> /// <see cref="Func{T, TResult}"/>で示された条件にマッチする要素をすべて削除しその要素数を返します。 /// </summary> /// <returns>削除した要素の数</returns> /// <param name="self"></param> /// <param name="predicate">削除をする条件</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int RemoveAll(this NonNullCollection <IParameter> self, Func <IParameter, bool> predicate) { var count = 0; for (var i = self.Count - 1; 0 <= i; i--) { if (predicate(self[i])) { self.RemoveAt(i); count++; } } return(count); }
/// <summary> /// 条件にマッチする最初のユニットを返します。 /// 条件にマッチする要素がない場合は<c>null</c>を返します。 /// </summary> /// <returns>条件にマッチした要素</returns> /// <param name="self"></param> /// <param name="type">ユニット種別</param> public static IUnit FirstOrDefault(this NonNullCollection <IUnit> self, string type) { return(self.FirstOrDefault(UnitType.FromName(type))); }
/// <summary> /// 条件にマッチする要素をすべて削除しその要素数を返します。 /// </summary> /// <returns>削除した要素の数</returns> /// <param name="self"></param> /// <param name="type">ユニット種別</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int RemoveAll(this NonNullCollection <IUnit> self, string type) { return(self.RemoveAll(UnitType.FromName(type))); }
/// <summary> /// 指定されたユニット定義パラメータで同名の既存のパラメータを置き換え、影響を被った既存の要素数を返します。 /// </summary> /// <returns>置き換えされた既存の要素の数</returns> /// <param name="self"></param> /// <param name="newParams">新しいパラメータ</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int ReplaceAll(this NonNullCollection <IParameter> self, params IParameter[] newParams) { return(self.ReplaceAll((IEnumerable <IParameter>)newParams)); }
/// <summary> /// 名前が一致する要素をすべて削除しその要素数を返します。 /// </summary> /// <returns>削除した要素の数</returns> /// <param name="self"></param> /// <param name="paramName">削除をする要素の名前</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int RemoveAll(this NonNullCollection <IParameter> self, string paramName) { return(self.RemoveAll(x => x.Name == paramName)); }
/// <summary> /// 名前が一致するユニット定義パラメータが存在するかどうかを確認します。 /// </summary> /// <returns>存在する場合は<c>true</c></returns> /// <param name="self"></param> /// <param name="paramName">ユニット定義パラメータ名</param> public static bool Any(this NonNullCollection <IParameter> self, string paramName) { return(self.Any(a => a.Name == paramName)); }
/// <summary> /// 名前が一致する最初のユニット定義パラメータを返します。 /// 条件にマッチする要素がない場合は<c>null</c>を返します。 /// </summary> /// <returns>条件にマッチした要素</returns> /// <param name="self"></param> /// <param name="paramName">ユニット定義パラメータ名</param> public static IParameter FirstOrDefault(this NonNullCollection <IParameter> self, string paramName) { return(self.FirstOrDefault(a => a.Name == paramName)); }
/// <summary> /// 条件にマッチする要素をすべて削除しその要素数を返します。 /// </summary> /// <returns>削除した要素の数</returns> /// <param name="self"></param> /// <param name="type">ユニット種別</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int RemoveAll(this NonNullCollection <IUnit> self, UnitType type) { return(self.RemoveAll(x => x.Type == type)); }
/// <summary> /// 指定されたユニットで同名の既存のユニットを置き換え、影響を被った既存の要素数を返します。 /// </summary> /// <returns>置き換えされた既存の要素の数</returns> /// <param name="self"></param> /// <param name="newUnits">新しいユニット</param> /// <exception cref="NotSupportedException">コレクションがイミュータブルな場合</exception> public static int ReplaceAll(this NonNullCollection <IUnit> self, params IUnit[] newUnits) { return(self.ReplaceAll((IEnumerable <IUnit>)newUnits)); }
/// <summary> /// 条件にマッチするユニットが存在するかどうかを確認します。 /// </summary> /// <returns>存在する場合は<c>true</c></returns> /// <param name="self"></param> /// <param name="type">ユニット種別</param> public static bool Any(this NonNullCollection <IUnit> self, UnitType type) { return(self.Any(x => x.Type == type)); }
/// <summary> /// 条件にマッチする最初のユニットを返します。 /// </summary> /// <returns>条件にマッチした要素</returns> /// <param name="self"></param> /// <param name="type">ユニット種別</param> public static IUnit First(this NonNullCollection <IUnit> self, UnitType type) { return(self.First(a => a.Type == type)); }
/// <summary> /// 条件にマッチするユニットが存在するかどうかを確認します。 /// </summary> /// <returns>存在する場合は<c>true</c></returns> /// <param name="self"></param> /// <param name="type">ユニット種別</param> public static bool Any(this NonNullCollection <IUnit> self, string type) { return(self.Any(UnitType.FromName(type))); }