トップページ > 記事閲覧
[task]文字列の長さ指定付き関数を追加
名前:yumetodo 日時: 2017/10/26 11:54

C++17でSTLにstd::string_viewが追加されたことにより、NULL終端しない長さがわかっている文字列を扱う機会が増えました。 しかし現在のDxLibの関数群は文字列を受け取る際、NULL終端を要求しており、 std::string_viewを渡すのに一度std::stringで動的メモリ割り付けとコピーを行う必要があり、きわめて非効率的です。 内部の実装を読んだ感じではstrlen相当の関数を読んでいるわけで(ex. DrawStringToHandleの内部実装(DrawStringHardware, DrawStringSoftwareなど)、 つまり引数で文字列へのポインタとともに長さを渡せるようにオーバーロードを追加しても実装はさして複雑にならないと考えます。 例えば DrawStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag ); のような関数がほしいです。
メンテ

Page: 1 |

Re: [proposal]文字列の長さ指定付き関数を追加してほしい ( No.1 )
名前:管理人 日時:2017/10/21 19:19

> 例えば >  > DrawStringToHandle( int x, int y, const TCHAR *String, size_t StringLength, unsigned int Color, int FontHandle, unsigned int EdgeColor, int VerticalFlag ); >  > のような関数がほしいです。 こちら文字列を引数に取るすべて関数についてでしょうか? 仮にそうだとしますと、ちょっと作業量が大きいので、取り組むとしても現在優先している作業が終わってからになります…
メンテ
Re: [proposal]文字列の長さ指定付き関数を追加してほしい ( No.2 )
名前:yumetodo 日時:2017/10/22 23:21

>こちら文字列を引数に取るすべて関数についてでしょうか? 文字列操作系はstring_view使う場合使わないと思うのでなくてもいいかと思われます。 >取り組むとしても現在優先している作業が終わってからになります… 了解です。
メンテ
Re: [proposal]文字列の長さ指定付き関数を追加してほしい ( No.3 )
名前:管理人 日時:2017/10/24 00:31

> 文字列操作系はstring_view使う場合使わないと思うのでなくてもいいかと思われます。 分かりました では文字列操作系以外で文字列を引数に取る関数について対応したいと思います ( 『現在優先している作業』の進捗状況が芳しくないので、取り掛かれるのは来年になってしまいそうですが… orz )
メンテ
Re: [proposal]文字列の長さ指定付き関数を追加してほしい ( No.4 )
名前:yumetodo 日時:2017/10/26 11:53

>取り掛かれるのは来年になってしまいそうですが 了解です
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.5 )
名前:yumetodo 日時:2017/12/24 13:36

書き忘れていました。string_viewはもととなる文字列を書き換えないので、それに反する関数群(といっても文字列操作系以外にはなかったはず)は対応不要です。 長さはsize_tでないといつぞやのGetColor()の戻り値問題の再発になります。
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.6 )
名前:管理人 日時:2017/12/25 00:12

了解です 尚、No.3 の書き込みに引き続き『現在優先している作業』の進捗が想定より遅れているので、 最速でも取り掛かれるのは来年の2月以降になりそうです orz
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.7 )
名前:yumetodo 日時:2017/12/25 15:52

>来年の2月以降になりそうです orz お疲れ様です・・・
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.8 )
名前:管理人 日時:2018/01/31 00:35

そろそろ実装の作業ができそうなのですが、こちら書式文字列を引数に取る関数( printf( "x:%d y:%d", x, y ); のような )は 対応しなくても良いのですよね? というのも『FormatString より前に StringLength を指定しなければならなくて気持ち悪いなー』と思っていたのですが、 『そもそもこのタイプの関数も StringLength の引数を指定するバージョンがあるべきなのか?』という疑問が沸きまして・・・
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.9 )
名前:yumetodo 日時:2018/02/04 22:15

>そろそろ実装の作業ができそうなのですが おおっ! >書式文字列を引数に取る関数 いらないと思います、fmtlib/fmtにリファレンスから誘導してもらえれば幸いですが。
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.10 )
名前:管理人 日時:2018/02/05 01:02

とりあえず DrawString系の関数に文字列の長さを指定するタイプの DrawNString などの関数を追加しました ( DLL にしている関係上、同名で引数の異なる関数にすることができないので別名関数になっています ) http://dxlib.o.oo7.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 http://dxlib.o.oo7.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 http://dxlib.o.oo7.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 http://dxlib.o.oo7.jp/temp/DxLibDotNet.zip // Windows版 .NET用 http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用 http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_x86.exe // Android版 x86用 http://dxlib.o.oo7.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、  BCCをお使いの場合は『再構築』をして下さい ) > いらないと思います、fmtlib/fmtにリファレンスから誘導してもらえれば幸いですが。 了解です fmtlib/fmt に関しては、分かる方だけが使う形にしたいと思うので誘導はしない方向で・・・ ところで本件の対応は LoadGraph や LoadSoundMem など、文字列を引数とする関数すべてについてご希望でしょうか?
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.11 )
名前:yumetodo 日時:2018/02/07 00:44

>とりあえず DrawString系の関数に文字列の長さを指定するタイプの DrawNString などの関数を追加しました 確認しました。 >ところで本件の対応は LoadGraph や LoadSoundMem など、文字列を引数とする関数すべてについてご希望でしょうか? 文字列の長さを受け取っても実装上内部で文字列コピーをしてNULL終端させざるを得なくなる、ということがない限りにおいて、 また文字列操作系とフォーマット文字列系を除いてすべてです。
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.12 )
名前:管理人 日時:2018/02/07 01:17

ご返答ありがとうございます 了解です ですが、関数名をどうするか悩みどころですね・・・ LoadGraph_with_StringLength では長すぎる気がしますし・・・ もし yumetodoさんに何か良いアイディアがありましたらご意見ください m(_ _;m ( 多分私の場合 LoadGraph_?? のような、『_』+『何か2文字』を関数名の末尾に追加するという結論に至ると思います・・・ )
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.13 )
名前:yumetodo 日時:2018/02/07 11:04

STLがどうやっているか調べたらstd::copyに対してstd::copy_nなんてのがあるが、あれはまたちょっと違うしなぁ・・・ 下手に短くして可読性を下げるよりは、WithStrLenとかをsuffixにしたほうがいいと思います。 短くしないと実行速度が下がるどっかの言語とは違うのですし、C/C++は。 (LoadGraph_with_StringLengthって命名規則ガバガバ過ぎでは・・・)。
メンテ
Re: [task]文字列の長さ指定付き関数を追加 ( No.14 )
名前:管理人 日時:2018/02/08 00:22

> STLがどうやっているか調べたらstd::copyに対してstd::copy_nなんてのがあるが、あれはまたちょっと違うしなぁ・・・ そうなんですよね、DrawString みたいに String とついている関数は DrawNString のようにできるのですが・・・ > 下手に短くして可読性を下げるよりは、WithStrLenとかをsuffixにしたほうがいいと思います。 ご提案ありがとうございます、では LoadGraphWithStrLen のような関数名にしてみます > (LoadGraph_with_StringLengthって命名規則ガバガバ過ぎでは・・・)。 関数名については既に( というより割と最初から )ぐちゃぐちゃなので、区別できれば良いくらいに考えています
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存