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