sakura icon indicating copy to clipboard operation
sakura copied to clipboard

CNativeW クラスの SetString メソッドに std::wstring_view 型を受け取るものを追加

Open beru opened this issue 4 years ago • 6 comments
trafficstars

PR の目的

SetString メソッドを呼ぶ際に、std::wstring 型のインスタンスの c_str() メソッドでポインタを引数にして呼びだすと、CNativeW::SetString( const wchar_t* pszData ) の実装で std::wstring_view のコンストラクタで文字列の要素数を調べる処理が走ります。文字列の要素数の情報は std::wstring 型の size や length メソッドで定数時間で取得できるので、それを使う方が効率が良いと思い変更しました。

カテゴリ

  • リファクタリング

PR の背景

PR のメリット

.c_str() の記述が無くせるので記述が短くなります。

PR のデメリット (トレードオフとかあれば)

特にないと思います。

仕様・動作説明

PR の影響範囲

テスト内容

テスト1

手順

関連 issue, PR

参考資料

https://cpprefjp.github.io/reference/string/basic_string/length.html https://cpprefjp.github.io/reference/string_view/basic_string_view.html

beru avatar Oct 02 '21 10:10 beru

:white_check_mark: Build sakura 1.0.3933 completed (commit https://github.com/sakura-editor/sakura/commit/07e122c14d by @beru)

AppVeyorBot avatar Oct 02 '21 11:10 AppVeyorBot

:white_check_mark: Build sakura 1.0.3937 completed (commit https://github.com/sakura-editor/sakura/commit/0d59e8cf3f by @beru)

AppVeyorBot avatar Oct 03 '21 01:10 AppVeyorBot

Draftのままですが、残課題とかありましたっけ?

berryzplus avatar Oct 09 '21 10:10 berryzplus

Draftのままですが、残課題とかありましたっけ?

テスト未実施なのでDraftにしています。

beru avatar Oct 09 '21 12:10 beru

このPRって続行します?

  • 趣旨 CNativeW::SetString(std::wstring_view str)を追加することにより、 dist.SetString(str.c_str(), str.length()) のような length() 呼出を削減し「高速化」したい。

  • 停止理由 単体テストを整備したいが時間がとれない。

個人的に懸念は「修正によって既存コードがクラッシュする事態にならないか?」だけです。

CNativeW dist;
const wchar_t* pNull = nullptr;
dist.SetString(pNull); //←これがstd::wstirng_view型引数と解釈された場合、クラッシュしてしまう。

berryzplus avatar May 06 '22 07:05 berryzplus