Raclamusi
Raclamusi
`Optional` についても同様の不具合があります。 `format_to(ctx.out(), sv)` で検索をかけるといくつか出てきましたが、 `Date` や `IPv4Address` などは `{}` が出てこないので問題なさそうです。 `Array` や `Grid` は `{` と `}` をそれぞれ `{{` と `}}` に置換することで解決していますが、 `replace` メンバ関数の呼び出しのたびに要素のコピーが発生しているので、パフォーマンスに影響が出てそうです。この機会に改めるのもいいかもしれません。 **`format_to(ctx.out(), sv)` で検索して出てきたクラス** - `String`...
pull-request 投げました。ご確認、お願いします。
ご指摘ありがとうございます。 その方法であれば、 `s3d::Allocator` の一部を修正するだけでよいので、私の提案した方法より適切だと思います。 実装案 ```c++ # include // OpenSiv3D v0.6.5 namespace s3d::improved { // ========== // Allocator.hpp // ========== /// @brief メモリアライメント対応アロケータ /// @tparam Type アロケーションするオブジェクトの型 /// @tparam Alignment...
実装はこんな感じで考えています。 https://github.com/Raclamusi/OpenSiv3D/commit/6e5019794fd2c3e810c79806bcbaa84b20f6a95d https://github.com/Raclamusi/OpenSiv3D/commit/ce65fe92c4074497213f078b364e1db50ba043b7
`SkipValidation` を追加するついでに、ほかの実装を考えました。 [SivBase64.cpp の実装案 (GitHub Gist)](https://gist.github.com/Raclamusi/eb7a5e66c296dc63aa332a543a67d39b) 上から、始めにすべてチェックしてしまう実装 ([SivBase64_CheckAtFirst.cpp](https://gist.github.com/Raclamusi/eb7a5e66c296dc63aa332a543a67d39b#file-sivbase64_checkatfirst-cpp)) 、変換のタイミングでチェックをする実装 ([SivBase64_CheckWhileConverting.cpp](https://gist.github.com/Raclamusi/eb7a5e66c296dc63aa332a543a67d39b#file-sivbase64_checkwhileconverting-cpp)) と、それを constexpr if を使うことで改良した実装 ([ SivBase64_CheckWhileConverting_UsingConstexprIf.cpp](https://gist.github.com/Raclamusi/eb7a5e66c296dc63aa332a543a67d39b#file-sivbase64_checkwhileconverting_usingconstexprif-cpp)) です。 処理速度はだいたい次の表のような感じです。 ||初めにチェック|変換しながらチェック|変換しながらチェック(constexpr if)| |:---:|:---:|:---:|:---:| |チェックありの処理速度|遅|速|速| |チェックなしの処理速度|速|遅|速| --- 適当に実行時間を測定した結果も載せておきます。 測定用コード(折り畳み) ```cpp # include void...
かなり期間が空いたので一度まとめます。 ### 現在の Base64::Decode の実装の問題点 https://github.com/Siv3D/OpenSiv3D/blob/b6b652461611389ff4e836f276e810126739e06f/Siv3D/src/Siv3D/Base64/SivBase64.cpp#L141-L165 現在 (v0.6.6) の `Base64::Decode` における Base64 文字列の正当性チェックは、 $4i+2$ 文字目と $4i+3$ 文字目についてのみ行うという中途半端な実装になっています。 また、文字コードが 256 以上の文字については下位 8 ビットしか見ていません。 これにより、`I*CTi7Twk4eL8JOGkfCTj7zwk4I*p1w` や `けべびひ` といった不正な Base64 文字列をデコードできてしまいます。 ### 提案...
きれいなコードを書くなら[**こっちの実装**](https://gist.github.com/Raclamusi/0d566d0b767e8e0b7883d35e7571d255)のほうがいいと思うのですが、実行速度とコードの美しさはどちらを優先したらいいでしょうか。 読みやすいコードを書きたい気持ちもありますが、変更前とあまり性能差を出したくないという気持ちもあります。 
提案コードを更新しました。 https://gist.github.com/Raclamusi/0834cd9eb85c87cffdc87bd0483f7ca5 - ヘッダの Doxygen コメントを追加しました - 末尾の不正な文字が無視される問題を解決しました - 不正な文字を検出したときに例外を搬出するようにしました - 長さが不正であったときにも例外を搬出するようにしました - `std::size(decodeTable)` を `256` に置き換えました - 警告抑制の方法をキャスト ( `static_cast(*pSrc)` ) から constexpr if ( `if constexpr (sizeof(Ch) >=...
余分なセミコロンも修正しました。
1. 16-bit BMP は Microsoft Paint で保存できる形式ではなく、マイナーですが、1, 4, 8, 24, 32-bit に対応して 16-bit だけ対応しないのも変なので、16-bit にも一緒に実装していいですか? 2. 現在の実装では、バッファの確保 ( `std::malloc` ) に失敗すると透明な画像を返す実装になっているので、`std::bad_alloc` もしくは `std::length_error` を投げるように変更したいです。一緒に実装しようと思っていますが、別で issue 立てたほうがいいですか? https://github.com/Siv3D/OpenSiv3D/blob/33ec9281b6968592a6835ec1772d7571fc94228f/Siv3D/src/Siv3D/ImageFormat/BMP/BMPDecoder.cpp?ts=4#L126