◀ANSI版開発トップへ
  • 2057 CMemoryを使いたいという人が現れた
    • 2058 RE: CMemoryを使いたいという人が現れた
      • 2061 Re2: CMemoryを使いたいという人が現れた
        • 2062 Re3: CMemoryを使いたいという人が現れた
        • 2063 Re3: CMemoryを使いたいという人が現れた
          • 2064 Re4: CMemoryを使いたいという人が現れた
            • 2065 Re5: CMemoryを使いたいという人が現れた
              • 2066 Re6: CMemoryを使いたいという人が現れた
                • 2070 Re7: CMemoryを使いたいという人が現れた
                  • 2071 Re8: CMemoryを使いたいという人が現れた
    • 2068 とりあえずOKと言っておきました
  • [2057] CMemoryを使いたいという人が現れた げんた 2002年05月14日 02:02

    本日エディタコンポーネントの日本語対応のためにCMemoryクラスを使わせて欲しいというメールが私のところに来ました。

    SourceForgeで探していたところこのエディタにたどり着いたとのこと。
    # SourceForge.jpでなくSourceForge.netで公開していて良かった(^^)

    ToolscenterというWindows用エディタコンポーネント
    http://www.toolscenter.org/about.htm
    http://groups.yahoo.com/group/TextCenter
    とScintilla http://www.scintilla.org に使いたいとのこと。

    で、みなさんに質問です。CMemory って客観的に見てどう思います? 性能とか、制限事項とか。私はUnicode対応といいつつ内部がSJISなので一部扱えない文字があるのが気になりますが。

    また、MFC/WTL用Wrapperを作りたいらしいので、インターフェースを変更するときには通知してあげないといけませんね。

    あとは、誰の手が入っているかもう一度確認しないと。

    本人には(日本語が見えるようなら)こちらに書き込んでいただくよう言っておきます。
    • [2058] RE: CMemoryを使いたいという人が現れた やざき 2002年05月14日 10:04


      >で、みなさんに質問です。CMemory って客観的に見てどう思います? 性能とか、制限事項とか。私はUnicode対応といいつつ内部がSJISなので一部扱えない文字があるのが気になりますが。

      MemCharNextとかMemCharPrev、CheckKanjiCode_EUCが、CMemoryを要求していないのに、CMemoryクラスの中にいたりするので、なんだかよくわからないクラスになっている気がします。
      • [2061] Re2: CMemoryを使いたいという人が現れた げんた 2002年05月15日 03:55

        ▼ やざきさん
        > MemCharNextとかMemCharPrev
        この2つはCMemoryと密接に関連しているので良いのではないでしょうか。ちゃんとstaticになっているし。

        どちらかと言えばこれらはCMemory::iterator (というのはないけど、作ったらの話)のoperator++, operator--に相当する機能だと思います。

        > CheckKanjiCode_EUC
        判定関数は微妙なところではありますが、エディタ全体を見たときに処理がCMemory内でのみ行われるので、関数もCMemory名前空間に用意したと考えれば妥当だと思います。

        CMemoryを使うと言いつつ、むしろこの辺が欲しかったのかも。
        だって、既存のエディタに使うというのだから文字を扱う部分は既にあるわけだし。
        • [2062] Re3: CMemoryを使いたいという人が現れた げんた 2002年05月15日 04:09

          ▼ げんたさん
          > 処理がCMemory内でのみ行われる
          大嘘でした。たしかに漢字判定は関係ないですね。
        • [2063] Re3: CMemoryを使いたいという人が現れた やざき 2002年05月15日 10:27


          >> MemCharNextとかMemCharPrev
          >この2つはCMemoryと密接に関連しているので良いのではないでしょうか。ちゃんとstaticになっているし。

          いや、ぜんぜん密接じゃないですよ。
          MemCharNextのなかでは、単に、char*とintを使っているだけで、CMemoryを使っている箇所はまったくない。
          CMemoryを要求していれば密接といってもいいと思うけどね。

          MemCharNextも実は、もともとの意図で使っていなくて気持ちが悪い。
          結局使うほうは、MemCharNextByte(次の文字のバイト数を取得する)くらいの意味でしか使っていないし。
          • [2064] Re4: CMemoryを使いたいという人が現れた げんた 2002年05月15日 18:37

            >タイトル: Re4: CMemoryを使いたいという人が現れた
            >発言者: やざき
            >>> MemCharNextとかMemCharPrev
            >>この2つはCMemoryと密接に関連しているので良いのではないでしょうか。ちゃんとstaticになっているし。
            >
            >いや、ぜんぜん密接じゃないですよ。
            >MemCharNextのなかでは、単に、char*とintを使っているだけで、CMemoryを使っている箇所はまったくない。
            >CMemoryを要求していれば密接といってもいいと思うけどね。
            あ、確かに。名前に惑わされてしまった。
            const char* pDataとint nLengthの組み合わせはCMemoryに置き換えられますね。

            >MemCharNextも実は、もともとの意図で使っていなくて気持ちが悪い。
            あ、これはそう思います。
            • [2065] Re5: CMemoryを使いたいという人が現れた みく 2002年05月15日 19:15


              バグ見つけました。

              MemCharNext
              全角文字のチェックをしているがサイズをチェックしてないので
              バッファを越えたところを見る可能性がある。
              ただし、NULL終端あり文字列・CMemory確保での文字列であれば
              終端記号を読むことになるのでセーフ。

              MemCharPrev
              CharPrev()はNULL終端された文字列を要求している。
              サクラエディタはバイナリを扱えるので文字列の途中にNULL文字
              があれば正しく動作しないだろう。

              MemCharNextSize, MemCharPrevSize みたいな
              文字サイズを取得できる関数作ったら良いのでは。
              (ほとんどがこの使い方だと思う)
              • [2066] Re6: CMemoryを使いたいという人が現れた げんた 2002年05月15日 20:34

                >サクラエディタはバイナリを扱えるので文字列の途中にNULL文字
                >があれば正しく動作しないだろう。
                ということはCMemoryに限らずこのエディタでは'\0'終端された文字列を前提としてはいけないと言うことですよね。なんか不安になってきました。
                • [2070] Re7: CMemoryを使いたいという人が現れた みく 2002年05月16日 18:56

                  >タイトル: Re7: CMemoryを使いたいという人が現れた
                  >発言者: げんた
                  >>サクラエディタはバイナリを扱えるので文字列の途中にNULL文字
                  >>があれば正しく動作しないだろう。
                  >ということはCMemoryに限らずこのエディタでは'\0'終端された文字列を前提としてはいけないと言うことですよね。なんか不安になってきました。

                  バイナリも使えるMemCharNext/Prev関数を作ってみました。
                  一応前方検索するようにして、テキストを最初から舐めな
                  くて済むようにしてますが、MemCharPrevはCharPrevより
                  1割ほど遅くなりました(CharPrevも前方検索だと思う)。

                  サイズ取得関数も作ってみましたが、似たようなコードが
                  複数あって保守性が悪くなるのでMemCharNext/Prevを使っ
                  たマクロまたはインライン関数にしたほうが良さそうです。
                  • [2071] Re8: CMemoryを使いたいという人が現れた みく 2002年05月16日 19:01


                    書き忘れました。ソースは、
                    egroups/source/MemChar0513.zip です。

                    あと、バッファ外にアクセスしないように修正してます。
                    #CharNext/CharPrev関数は平気でアクセスしている。
    • [2068] とりあえずOKと言っておきました げんた 2002年05月16日 07:01

      私が許可を出す権限は無いのですが、一応すべてのコードをzlib/libpngライセンスで配布しても問題ないと判断しましたのでOKと返事しました。

      みさかさんからはメールにて許可をもらいました。
      jeproさんは文字列にしか変更を加えていないので特に許可は不要と判断しました。
      horさんの名前はファイル先頭にはあるのですがソース中から該当箇所を発見できませんでした。

      CMemory を使いたいと言ってきた "Paul Selormey" <paul@toolscenter.org> さんから開発者の方々への言葉を転載します。

      > I wish to express my sincere gratitude to all the authors and contributors to the codes and for your kind offer to use it freely. I will communicate any modifications to you. It might be mainly the Japanese comments since most users of the TextCenter do not have systems that will handle them.
      > Your copy rights will, however, be preserved.