◀ANSI版開発トップへ
  • 4397 cmemory修正アップ
    • 4402 Re:cmemory修正アップ
      • 4403 Re2:cmemory修正アップ
    • 4451 Re:cmemory修正アップ
      • 4452 Re2:cmemory修正アップ
    • 4456 Re:cmemory修正アップ
    • 4459 Re:cmemory修正アップ
      • 4460 Re2:cmemory修正アップ
        • 4467 Re3:cmemory修正アップ
          • 4469 Re4:cmemory修正アップ
        • 4470 Re3:cmemory修正アップ
    • 4476 Re:cmemory修正アップ
      • 4477 Re2:cmemory修正アップ
      • 4478 Re2:cmemory修正アップ
  • [4397] cmemory修正アップ ラスティブ 2006年04月10日 12:45

    文字コード判別・変換処理を修正しました.
    CEncoder モジュールを(I/Fやらなにやら刷新されてますけど)
    最大限に活用したつもり…というか,ごった煮版になってる感じです.

    ブリーフケース/Developer/Source/CMemoryFixed_0.1_b.zip

    いろいろと荒削りなのでβバージョンです.
    パッチにまとめてない,テスト環境そのまんまをパックしたものですがご容赦ください.

    仕様変更:
    ・文字コード変換処理する際に,データがフィルタリングするようにした.
    改良点:
    ・MIMEヘッダーのサブジェクトをデコードする際のチェックを強化した.
    新機能:
    ・MIMEヘッダーのサブジェクトのデコードに,UTF-8を受け付けるようにしたつもり.
    ・CMemory wchar 版を見習って,Unicode のサロゲートペア処理実装.

    今後は時間が取れなくなりそうなので,(今でもカメさん並ですが)
    ゾウさん並に更新サイクルが遅くなりそうです.その間にどなたかコメントしていただければ….

    追記:
    複数行一括選択時の処理を最適化するために,
    CMemory がリスト型データを扱えるようにできるかどうか検討中です….
    • [4402] Re:cmemory修正アップ dskoba 2006年04月13日 00:01

      お疲れ様です。
      エンコーディング変換の関数で必要バイトを取得とか,MIMEヘッダのデコード部とか,途中だった部分が完成されているのを見ると嬉しいです。

      中身はまだよく見ていませんが,ファイル名とネームスペース名が気になったので。
      エンコーディング変換のみにするなら,
      ・CEncoder.h
      ・CEncoder.cpp
      ・namespace Encoder
      の方が良くありませんかね。いずれ大文字<->小文字とかもこっちに移動するなら
      ・CConverter.h
      ・CConverter.cpp
      ・namespace Converter
      か,もしくは分けて
      ・CConverter.h
      ・CEncodingConverter.cpp / CXxxxxConverter.cpp
      namespace Converter
      {
      namespace Encoding
      {
      SJisToEucJp();
      }
      namespace Xxxxx
      {
      ToLower();
      }
      }

      む。そもそもクラスになってないので,ファイル名先頭のCは必要ないですね。
      • [4403] Re2:cmemory修正アップ ラスティブ 2006年04月14日 22:44

        >エンコーディング変換の関数で必要バイトを取得とか,
        >MIMEヘッダのデコード部とか,途中だった部分が完成されているのを見ると嬉しいです。
        ありがとうございます(^^)

        >中身はまだよく見ていませんが,ファイル名とネームスペース名が気になったので。

        ですね…;;
        概ね dskoba さんの構想でいいと思うんですけど,
        大文字<->小文字変換てロケールに依存する処理なので,
        Unicode 化するときのことを考えて,慎重にやっております.
        とりあえず今できあがってる機能を端的に表すと,
        EncodingConverter がしっくり来るので.
        ファイルの名前は Converter.h に EncodingConverter.cpp …かな.
        やたらと長くて指に負担がかかるのがアレですが.
    • [4451] Re:cmemory修正アップ ラスティブ 2006年04月30日 13:36

      ▼ ラスティブさん
      仕様変更:
      > ・文字コード変換処理する際に,データがフィルタリングするようにした.
      > 改良点:
      > 新機能:
      > ・MIMEヘッダーのサブジェクトのデコードに,UTF-8を受け付けるようにしたつもり.
      > ・CMemory wchar 版を見習って,Unicode のサロゲートペア処理実装.

      cmemory 修正アップしました。パッチも一応まとめときました。
      個人的な事情で Top Revision 960 向けのパッチなのですがご容赦下さい。
      主な効能は、修正個所をできる限り記述した readme.txt に書きなぐってますのでご覧下さい。

      ブリーフケース/Developer/Source/sdiff_R960_CMemoryFixed_0.7_b.zip
      # β版のバージョン値は気まぐれに上がってます。

      > ・MIMEヘッダーのサブジェクトをデコードする際のチェックを強化した.

      というのは大嘘でした…。正しくは、
      「CEncodingConverter.cpp(当時のファイル名) 修正個所内で、
      MIMEヘッダのサブジェクトを中途半端に選択した状態で変換するとデータが壊れる問題を修正。」
      申し訳ありません;;

      追記:
      > 複数行一括選択時の処理を最適化するために,
      > CMemory がリスト型データを扱えるようにできるかどうか検討中です….
      ちょい挫折。
      • [4452] Re2:cmemory修正アップ ラスティブ 2006年04月30日 13:43

        そういえば readme.txt に書き忘れたことがあったので追記。

        ・global.h にあった改行コードのシンボルを CEOL.h に移転させた。
    • [4456] Re:cmemory修正アップ ラスティブ 2006年05月02日 17:00

      cmemory 修正…というより、cmemory 更新版アップしました。

      ブリーフケース/Developer/Source/sdiff_2006-04-20_CMemoryFixed_0.71_b.zip

      ・ファイル名を charcode.h から CharCode.h に変えていたせいで、パッチが当たらなかった問題を修正。すみません。
      ・CMem.h, CMemory.h 内で、コンストラクタの記述に致命的な誤りがあった問題を修正。
      ・CEditDoc.cpp 修正個所内で、データが正しく内部コードへ変換されない場合に出るメッセージ文をより具体的に。

      ブリーフケース/Developer/Source/sdiff_2006-04-20_CMemoryFixed_0.71_b_TrialVer.zip

      ・sdiff_2006-04-20_CMemoryFixed_0.71_b の修正分。
      ・大量のデータを削除したら CPU 占有率100%状態でフリーズする問題を修正。

      TrialVer のほうは、いろいろ問題があって挫折しかかっていたのですが、
      どんな具合いになるのか試しに組み込んでみたものです。
      従来のものと比べて、インターフェースの互換性は保たれてますけれど、内部構造が違うので、
      従来のものと分けてパッチを作成しました。

      個人的な事情で最新版ソースをダウンロードできなくて、GNU Unified Diff 形式なのですがご容赦下さい。
    • [4459] Re:cmemory修正アップ ラスティブ 2006年05月04日 20:37

      cmemory 修正アップです。

      ブリーフケース/Developer/Source/sdiff_2006-04-20_CMemoryFixed_0.13_b.zip

      readme.txt から転載します。

      ◆ 前回からの変更(大まかに)
      ・sdiff_2006-04-20_CMemoryFixed_0.71_b_TrialVer.diff(sdiff_2006-04-20_CMemoryFixed_0.7.1_b_TrialVerの間違い) の修正分.
      ・【バグ】CMemory.cpp 修正箇所内で,void CMemory::Append() が直前に確保したメモリ領域を有効に使わない動作になっていた問題を修正.
      ・CMem クラスへの関数追加.(CalcObjectSize, IsCapableSize, SetObjectSize, SetContainerSize.)
      ・前回作成した void CMemory::AppendBlock(const char*, size_t) インターフェースを void CMemory::Append(const char*, size_t) に統合.
      ・ChartypeConverter.cpp に CMemory::ToLower, CMemory::ToUpper, CMemory::ToZenkaku, CMemory::ToHankaku の中身を移植.
      ・英大文字←→英小文字 のインターフェース名を,ロシア語,ギリシャ文字も変換するのってことで,大文字←→小文字に変更.

      ◆これまでのまとめ
      ・改善:VC6 で,new が失敗したら bad_alloc() を飛ばすように.
      ・新機能:EUC-JP, UTF-8, Unicode, UnicodeBe を内部コード(今のところSJIS)へ変換できなかった場合に報告するように.
      ・改善:CMemory::Append() を大規模データに対してもある程度対応できる仕様に.
      ・改善か改悪か分からない変更:機能をより明確に表現するために,EUC を EUCJP に名称変更.
      ・改善か改悪か分からない変更:機能をより明確に表現するために,英大文字←→英小文字 を 大文字←→小文字 に名称変更.

      当初の目的はこれでほぼ達成できた感じですので、
      CMemoryFixed_0.13_b をもって個人的にバージョン 1.0 とさせて下さい。
      (既存の SJIS 専用関数を Unicode に対応させる抽象化作業が残ってる…、けど構想練るにまだかかりそうで。)

      仕様的にベータ版ですが、以上です。
      • [4460] Re2:cmemory修正アップ ラスティブ 2006年05月05日 19:44

        cmemory修正アップです。
        ファイル名とネームスペース名を変更したので、取り急ぎ報告。

        ブリーフケース/Developer/Source/sdiff_2006-04-20_CMemoryFixed_0.13.1_b.zip

        ◆ 前回からの変更(大まかに)
        ・sdiff_2006-04-20_CMemoryFixed_0.13_b.diff の修正分.
        ・【バグ】EncodingConverter.cpp 修正箇所内で,UTF-16 → UTF-8 の際,サロゲートペア処理に不備があったところを机上デバッグにて修正.
        ・charcode.h で,unsigned char, unsigned short, unsigned long 型をそれぞれ uchar_t, uchar16_t, uchar32_t で typedef した.
        ・EncodingConverter.cpp 内で,unsigned char, wchar_t をそれぞれ uchar_t, uchar16_t に置き換えた.
        ・charcode.h, CharCode.cpp 内で,unsigned char, wchar_t をそれぞれ uchar_t, uchar16_t に置き換えた.
        ・概念的結びつきを強めるため,namespace CharCode {} を namespace Charcode {} に変更.
        ・概念的な混乱を避けるため,namespace Converter::Chartype {} を namespace Converter::Typeface {} に変更.
        ・ファイル名を CharCode.cpp から Charcode.cpp へ変更.
        ・ファイル名を ChartypeConverter.cpp から TypefaceConverter.cpp へ変更.
        ・【バグ】CMemory::ToZenkaku にバグを作り込んでしまっていたので、その周辺まとめてロールバック。←readme.txt に書き忘れ
        • [4467] Re3:cmemory修正アップ あろか 2006年05月13日 16:23

          ▼ ラスティブさん
          > cmemory修正アップです。
          >
          > ブリーフケース/Developer/Source/sdiff_2006-04-20_CMemoryFixed_0.13.1_b.zip
          >
          差分をダウンロードしてみましたが、たとえば CMemory.cppに関する修正は両方に含まれています。patch当ててから上書きするのか、patchだけでよいのか、、
          ファイル内の.diffとソースの関係はどうなっているか教えてください。

          とりあえず現状ではBccでコンパイルできていないためソースコードの改修が必要そうです。
          • [4469] Re4:cmemory修正アップ ラスティブ 2006年05月14日 15:06

            > 差分をダウンロードしてみましたが、たとえば CMemory.cppに関する修正は両方に含まれています。patch当ててから上書きするのか、patchだけでよいのか、、
            > ファイル内の.diffとソースの関係はどうなっているか教えてください。

            すみません.説明不足でご迷惑おかけします.

            新規作成ファイルリストに含まれていないファイルの変更については,基本的に全て .diff のほうに含めているつもりですので,どちらの方法でも大丈夫です.差し替えとなりそうなファイルを,念のため確認用に同封したのですが,readme.txt に書き忘れておりました;;

            > 現状ではBccでコンパイルできていない

            確認とっていませんでしたー(ぇ
            アップしなおします.

            手元にて,実験的に CMemory::TABToSPACE, CMemory::SPACEToTAB を SJIS と UNICODE の両方に対応させてみたものが桁外れな速度ダウンを生み出した結果に終わってしまっているのも…持っててもアレなので,近いうちに放出します.
            「これじゃダメだった」という実装例として役に立てそうです.
            # このドッカン遅いのを我慢すると
            # ステータスバーに本来の文字値を表示することができるようになる.
            # という見通しはあるのですけれど,スキルが足りません.
        • [4470] Re3:cmemory修正アップ ラスティブ 2006年05月14日 20:16

          cmemory 修正アップしました.
          コメントが雑かったりひとつも書かれてなかったり日付が無かったり doxygen 仕様に従ってなかったりと.体裁面で不備がありますが…
          コンパイルは通りましたということで.

          共有フォルダ/Developer/Source/sdiff_r969_CMemoryFiexed_0.13.2_b.zip

          前回からの変更点(大まかに):
          ・いろいろ途中になっているものとか実装したけど使わなかったとか,不完全な修正をばっさり削除 or ロールバック.
          ・CMem にあった線形リスト系変数とアクセッサを削除.
          ・CMemory 内部データブロックとして,CMem クラスを継承させた CMemBlk クラスを新規作成(ポインタいっこ付け加えただけ.)
          ・EncodingConverter に UTF-8 ←→ SJIS 変換関数と一文字変換関数 CCnv*系 を追加.
          ・Borland C++ 5.5 でコンパイルできなかったところを修正.
          ・その他こまごまと.

          以上です.
    • [4476] Re:cmemory修正アップ ラスティブ 2006年05月27日 09:01

      cmemory 修正アップしました.

      共有フォルダ/Developer/Source/sdiff_r974_CMemoryFixed_0.13.4_b.zip

      変更点リスト

      ・コンパイルエラー解消.(今更;;)
      ・CMemVec クラス新規作成.(名前を略しすぎて意味不明になった感があるので,名前だけ変更するかもしれぬ;;)
      ・COpeBlk のコンテナを CMemVec ベースに変更.
      ・CDocLineMgr の挿入削除処理のコードを整理.
      ・pcDocLine->m_pLine->GetPtr() 見たいな箇所を全部 pcDocLine->GetPtr() とし,メンバ変数 public: m_pLine を private: m_cmemLine とした.
      ・変換できない文字を '?' に変換するのがどうも紛らわしいので,0xff または 0xffff に変換するように変更.
      • [4477] Re2:cmemory修正アップ ラスティブ 2006年05月27日 09:52

        >>dev:4476 の追記:
        変換できない文字を0xff または 0xffff に変換する点において大きな問題を抱えています.
        CDocLine にテキストデータとバイナリデータを持たせておくという手を思いついたのですが・・・

        その辺りの解決策ついて,どなたかからのコメントをお待ちしてます.
      • [4478] Re2:cmemory修正アップ ラスティブ 2006年05月27日 09:59

        重要な変更点の報告を忘れてました.

        変更点:
        ・CDocLineMgr::DeleteData_CDocLineMgr の8番目の引数を CMemory& から CMemory* へ変更.

        # また妙な変更を紛れ込ませてしまいました;;