Beispiel #1
0
        /// <summary>配列内の値の型が全て一致するか判定する。</summary>
        /// <param name="array">判定する配列参照。</param>
        /// <param name="iter">イテレータ。</param>
        /// <returns>配列情報。</returns>
        private ITomlValue CheckArrayValueType(List <ITomlValue> array,
                                               TomlInnerBuffer.TomlIter iter)
        {
            TomlValueType type = TomlValueType.TomlNoneValue;

            // 全ての要素の型が一致することを確認
            if (array.Count > 0)
            {
                type = array[0].ValueType;

                for (int i = 1; i < array.Count; ++i)
                {
                    if (type != array[i].ValueType)
                    {
                        throw new TomlAnalisysException(Resources.ARRAY_VALUE_DIFFERENT_ERR, iter);
                    }
                }
            }

            // 配列を作成して返す
            switch (type)
            {
            case TomlValueType.TomlBooleanValue:
                var bools = array.Select(x => (bool)x.Raw).ToArray();
                return(TomlValue.Create(bools));

            case TomlValueType.TomlDateValue:
                var dates = array.Select(x => (TomlDate)x.Raw).ToArray();
                return(TomlValue.Create(dates));

            case TomlValueType.TomlFloatValue:
                var floats = array.Select(x => (double)x.Raw).ToArray();
                return(TomlValue.Create(floats));

            case TomlValueType.TomlIntegerValue:
                var longs = array.Select(x => (long)x.Raw).ToArray();
                return(TomlValue.Create(longs));

            case TomlValueType.TomlStringValue:
                var strings = array.Select(x => (string)x.Raw).ToArray();
                return(TomlValue.Create(strings));

            default:
                return(TomlValue.Create(array.ToArray()));
            }
        }
 public TomlValue(Utf8String segment, TomlValueType valueType, int parentIndex) : this()
 {
     ParentIndex   = parentIndex;
     TomlValueType = valueType;
     m_segment     = segment;
 }