예제 #1
0
        /// <summary>
        /// リストまたはタプルにインデクスでアクセスします。境界チェックは行われません。
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public QiValue this[int index]
        {
            //TODO: Map型でキーが整数だった場合、とかどう思いますかね
            get
            {
                switch (ContentValueKind)
                {
                case QiValueKind.QiList:
                    return(QiApiValue.GetList(NonDynamicValue, (uint)index));

                case QiValueKind.QiTuple:
                    return(QiApiValue.GetTuple(NonDynamicValue, (uint)index));

                default:
                    throw new InvalidOperationException("QiValue is neither list or tuple");
                }
            }
            set
            {
                switch (ContentValueKind)
                {
                case QiValueKind.QiList:
                    QiApiValue.SetList(NonDynamicValue, (uint)index, value);
                    return;

                case QiValueKind.QiTuple:
                    QiApiValue.SetTuple(NonDynamicValue, (uint)index, value);
                    return;

                default:
                    throw new InvalidOperationException("QiValue is neither list or tuple");
                }
            }
        }
예제 #2
0
 /// <summary>
 /// 連想配列のキー一覧を取得します。
 /// </summary>
 /// <returns>キー一覧</returns>
 public QiValue GetKeys()
 {
     if (ContentValueKind != QiValueKind.QiMap)
     {
         throw new InvalidOperationException("This QiValue is not QiMap");
     }
     return(QiApiValue.KeysMap(NonDynamicValue));
 }
예제 #3
0
 /// <summary>
 /// リストに要素を追加します。
 /// </summary>
 /// <param name="value">追加する値</param>
 /// <returns></returns>
 public bool AddElement(QiValue value)
 {
     if (ValueKind != QiValueKind.QiList)
     {
         throw new InvalidOperationException("this QiValue is not QiList");
     }
     return(QiApiValue.AddList(this, value));
 }
예제 #4
0
 /// <summary>
 /// 連想配列にキー要素でアクセスします。キーが連想配列に含まれるかどうかはチェックされません。
 /// </summary>
 /// <param name="key"></param>
 /// <returns></returns>
 public QiValue this[QiValue key]
 {
     get
     {
         if (ContentValueKind != QiValueKind.QiMap)
         {
             throw new InvalidOperationException("This QiValue is not QiMap");
         }
         return(QiApiValue.GetMap(NonDynamicValue, key));
     }
     set
     {
         if (ContentValueKind != QiValueKind.QiMap)
         {
             throw new InvalidOperationException("This QiValue is not QiMap");
         }
         QiApiValue.SetMap(NonDynamicValue, key, value);
     }
 }
예제 #5
0
 /// <summary>この変数が倍精度小数型であると想定して値を取得します。</summary>
 /// <returns>格納された値</returns>
 public double ToDouble() => QiApiValue.GetDoubleWithDefault(NonDynamicValue, 0.0);
예제 #6
0
 /// <summary>
 /// 値のコピーを生成します。
 /// </summary>
 /// <param name="src">生成元の値</param>
 /// <returns>コピーされた値</returns>
 public static QiValue GetCopy(QiValue src) => QiApiValue.Copy(src);
예제 #7
0
 /// <summary>インスタンスを破棄します。</summary>
 public void Destroy() => QiApiValue.Destroy(this);
예제 #8
0
 /// <summary>この変数が符号なし整数型であると想定し、失敗時のデフォルト値を指定して値を取得します。</summary>
 /// <param name="defaultValue">取得に失敗した場合返される値</param>
 /// <returns>成功した場合は実際の値、失敗した場合は指定したデフォルト値</returns>
 private ulong GetValue(ulong defaultValue) => QiApiValue.GetUInt64WithDefault(NonDynamicValue, defaultValue);
예제 #9
0
 /// <summary>この変数が単精度小数型であると想定し、値を設定します。</summary>
 /// <param name="v">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(float v) => QiApiValue.SetFloat(NonDynamicValue, v);
예제 #10
0
 /// <summary>この変数が符号なし整数型であると想定し、値を設定します。</summary>
 /// <param name="v">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(ulong v) => QiApiValue.SetUInt64(NonDynamicValue, v);
예제 #11
0
 /// <summary>この変数がダイナミック型であると想定し、内側に格納している値を取り出します。</summary>
 /// <returns>動的型の中に格納された値</returns>
 public QiValue GetDynamic() => QiApiValue.GetDynamic(this);
예제 #12
0
 /// <summary>この変数がオブジェクト型であると想定して値を取得します。</summary>
 /// <returns>格納された値</returns>
 public QiObject GetObject() => QiApiValue.GetObject(NonDynamicValue);
예제 #13
0
 /// <summary>この変数が文字列型である場合はその値、そうでない場合は保持している値の型を表す文字列を取得します。</summary>
 /// <returns>格納された値</returns>
 public override string ToString() => (ContentValueKind == QiValueKind.QiString) ?
 QiApiValue.GetString(NonDynamicValue) :
 ContentValueKind.ToString();
예제 #14
0
 /// <summary>この変数がバイナリデータ型であると想定して値を取得します。</summary>
 /// <returns>格納された値</returns>
 public byte[] ToBytes() => QiApiValue.GetRaw(NonDynamicValue);
예제 #15
0
 /// <summary>この変数が倍精度小数型であると想定し、値を設定します。</summary>
 /// <param name="v">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(double v) => QiApiValue.SetDouble(NonDynamicValue, v);
예제 #16
0
 /// <summary>値のシグネチャを取得します。</summary>
 /// <param name="resolveDynamics">シグネチャの解決法フラグ(サンプル見た限り既定値以外を使うように見えない)</param>
 /// <returns>値のシグネチャ</returns>
 public string GetSignature(bool resolveDynamics = false) => QiApiValue.GetSignature(this, Convert.ToInt32(resolveDynamics));
예제 #17
0
 /// <summary>この変数が文字列型であると想定し、値を設定します。</summary>
 /// <param name="v">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(string v) => QiApiValue.SetString(NonDynamicValue, v);
예제 #18
0
 /// <summary>
 /// (動作未確認)値を規定値に戻します。
 /// </summary>
 /// <param name="signature"></param>
 public void Reset(string signature) => QiApiValue.Reset(this, signature);
예제 #19
0
 /// <summary>この変数が動的型であると想定し、値を設定します。</summary>
 /// <param name="v">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(QiValue v) => QiApiValue.SetDynamic(this, v);
예제 #20
0
 /// <summary>
 /// 型情報を取得します。
 /// </summary>
 /// <returns>インスタンスに対応する型情報</returns>
 public QiType GetQiType() => QiApiValue.GetQiType(this);
예제 #21
0
 /// <summary>この変数がオブジェクト型であると想定し、値を設定します。</summary>
 /// <param name="obj">設定する値</param>
 /// <returns>設定に成功した場合はtrue</returns>
 public bool SetValue(QiObject obj) => QiApiValue.SetObject(NonDynamicValue, obj);
예제 #22
0
 /// <summary>
 /// シグネチャを指定して値を初期化します。
 /// </summary>
 /// <param name="sig">値のシグネチャを表す文字列</param>
 /// <returns>初期化された値</returns>
 public static QiValue Create(string sig) => QiApiValue.Create(sig);
예제 #23
0
 /// <summary>Rawデータ型の変数にバイナリを設定します。</summary>
 /// <param name="data">設定するバイナリデータ</param>
 /// <returns>設定に成功したかどうか</returns>
 public bool SetValue(byte[] data) => QiApiValue.SetRaw(NonDynamicValue, data);
예제 #24
0
 /// <summary>
 /// 指定した2つの値を入れ替えます。
 /// </summary>
 /// <param name="v1"></param>
 /// <param name="v2"></param>
 public static void Swap(QiValue v1, QiValue v2) => QiApiValue.Swap(v1, v2);
예제 #25
0
 /// <summary>この変数が単精度小数型であると想定して値を取得します。</summary>
 /// <returns>格納された値</returns>
 public float ToFloat() => QiApiValue.GetFloatWithDefault(NonDynamicValue, 0.0f);