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

わんくま同盟

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

C# と VB.NET の入門サイト

■91917 / 10階層)  C++からVBへの変換
□投稿者/ 魔界の仮面弁士 (2293回)-(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
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[9]: C++からVBへの変換 /えんえん 返信無し
 
上記関連ツリー

C++からVBへの変換 / えんえん (19/08/08(Thu) 22:51) #91899
Re[1]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/08(Thu) 23:48) #91900
  └ Re[2]: C++からVBへの変換 / えんえん (19/08/09(Fri) 10:36) #91905
    └ Re[3]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/09(Fri) 12:18) #91906
      └ Re[4]: C++からVBへの変換 / えんえん (19/08/09(Fri) 12:28) #91907
        └ Re[5]: C++からVBへの変換 / Hongliang (19/08/09(Fri) 12:46) #91908
          └ Re[6]: C++からVBへの変換 / ぶなっぷ (19/08/09(Fri) 13:05) #91909
            └ Re[7]: C++からVBへの変換 / えんえん (19/08/09(Fri) 13:12) #91910
              ├ Re[8]: C++からVBへの変換 / Hongliang (19/08/09(Fri) 13:18) #91911
              │└ Re[9]: C++からVBへの変換 / えんえん (19/08/09(Fri) 13:23) #91912
              │  └ C++からVBへの変換 / 魔界の仮面弁士 (19/08/09(Fri) 17:42) #91917 ←Now
              └ Re[8]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/09(Fri) 13:54) #91913
                └ Re[9]: C++からVBへの変換 / えんえん (19/08/10(Sat) 07:13) #91924
                  └ Re[10]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/10(Sat) 09:41) #91925
                    └ Re[11]: C++からVBへの変換 / えんえん (19/08/10(Sat) 10:16) #91927
                      └ Re[12]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/10(Sat) 14:19) #91930
                        └ Re[13]: C++からVBへの変換 / 774RR (19/08/10(Sat) 15:02) #91932
                          ├ Re[14]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/10(Sat) 16:23) #91933
                          │└ Re[15]: C++からVBへの変換 / えんえん (19/08/11(Sun) 21:42) #91934
                          │  └ Re[16]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 12:05) #91938
                          │    ├ Re[17]: C++からVBへの変換 / えんえん (19/08/12(Mon) 14:12) #91939
                          │    │├ Re[18]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 16:25) #91940
                          │    │├ Re[18]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 17:33) #91942
                          │    │└ Re[18]: C++からVBへの変換 / 774RR (19/08/12(Mon) 16:56) #91941
                          │    └ Re[17]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/13(Tue) 01:00) #91946
                          └ Re[14]: C++からVBへの変換 / 魔界の仮面弁士 (19/08/12(Mon) 22:51) #91944
                            └ Re[15]: C++からVBへの変換 / えんえん (19/08/13(Tue) 11:01) #91947

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信