C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.91917 の関連記事表示

<< 0 >>
■91917  Re[10]: C++からVBへの変換
□投稿者/ 魔界の仮面弁士 -(2019/08/09(Fri) 17:42:02)
    2019/08/13(Tue) 00:01:21 編集(投稿者)

    追記:拡張メソッドの不具合修正

    No91912 (えんえん さん) に返信
    > Dim ar2 As New ArraySegment(Of Double)(ar, r, ar.length - r)
    > が正しいのでしょうか?
    > 要素数を最後まで指定しないといけないですよね?

    そうなりますね。


    処理を分かりやすくするために、ArraySegment のための
    拡張メソッドを用意しておくのが良いでしょう。


    後述のコードを用意しておけば、
      // 元の C++ 実装
      tmpr[m * n_radix + j] = xr * wr - xi * wi;
    に相当する処理を、
      tmpr.SetValue(m * n_radix + j, xr * wr - xi * wi)
    の構文で書ける様になります。


    また、再帰呼び出しの
      // C++
      fft(n_radix, theta * radix, &tmpr[r], &tmpi[r], ar, ai);
    についても、
      fft(n_radix, theta * radix, tmpi.AsSegment(r), tmpi.AsSegment(r), ar, ai)
    で済むようになります。



    '----------------------
    Module ArraySegmentExtension
      <System.Runtime.CompilerServices.Extension>
      Public Function AsSegment(Of T)(this As T()) As ArraySegment(Of T)
        Return New ArraySegment(Of T)(this)
      End Function

      <System.Runtime.CompilerServices.Extension>
      Public Function AsSegment(Of T)(this As T(), start As Integer) As ArraySegment(Of T)
        Return New ArraySegment(Of T)(this, start, this.Length - start)
      End Function

      <System.Runtime.CompilerServices.Extension>
      Public Function AsSegment(Of T)(this As ArraySegment(Of T), start As Integer) As ArraySegment(Of T)
        'Return New ArraySegment(Of T)(this.Array, this.Offset + start, this.ToArray.Length - this.Offset - start)
        Return New ArraySegment(Of T)(this.Array, this.Offset + start, this.Array.Length - this.Offset - start)
      End Function

      <System.Runtime.CompilerServices.Extension>
      Public Function AsSegment(Of T)(this As ArraySegment(Of T), start As Integer, length As Integer) As ArraySegment(Of T)
        Return New ArraySegment(Of T)(this.Array, this.Offset + start, length)
      End Function

      <System.Runtime.CompilerServices.Extension>
      Public Function AsSegment(Of T)(this As T(), start As Integer, length As Integer) As ArraySegment(Of T)
        Return New ArraySegment(Of T)(this, start, length)
      End Function

      <System.Runtime.CompilerServices.Extension>
      Public Function SetValue(Of T)(this As ArraySegment(Of T), index As Integer, newValue As T) As ArraySegment(Of T)
        this.Array(this.Offset + index) = newValue
        Return this
      'End Sub
      End Function
    End Module
記事No.91899 のレス /過去ログ158より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -