タイプ別設定を表示すると、色指定が初期化されます。
項目名のみを更新するようにしました。 また、ヘッダとassert()を追加しました。
言語DLLを切り替えたときに項目名が変更されるのを確認しました。
ColorInfo構造体のメンバ変数で名前をを配列で確保している部分をポインタに変更しました。 共有メモリと文字列のコピー処理が削減できます。
コードの流れを見つけるのも追いかけるのも難しいのですが、 struct DLLSHAREDATA.m_Types[i].m_ColorInfoArr[j].m_pszName はどのプロセスからもアクセス可能なポインタになっているでしょうか。
初期化は CType.cpp, CType_*.cppで行われ、アクセスは主に CType.h の CTypeConfigを通して行われるようです。おそらく。
また枝葉ですが、szが zero-terminated stringの意だとすると std:tstringメンバのプリフィックスとしては相応しくないと思います。 sか、それが structと紛らわしいなら、strはどうでしょうか。
ColorInfo構造体からメンバ変数(m_szName)を削除し、 項目名は関数経由で取得するようにしました。
void SetColorInfoName( int nIndex )に関して、 名前とその有りように改善の余地があると思います。
1.setterでありながらセットする値を受け取らない点 2.利用者にとって呼ぶ価値・理由がなく、.cpp内に隠蔽すべきであると考えられる点
1については Init、Re-set、Prepareなどが候補です。 2については GetColorInfoName内でどうにか必要性の有無を判断できないでしょうか。
trunk2_fix_typecolor_b.patchについて、 色指定リストが初期化されて表示される件とは別の話なので このticket内での対応は取り下げたいと思います(別件対応)。
また、共有メモリと文字列のコピー処理削減の対応については、 ds14050さんがよい案をお持ちのようなので、お任せしたいと思います。 (自分は手を引きます)
trunk2_fix_typecolor.patch [r3471]でcommitしました。
Commit: [r3471]
ましな案を思いついて書き込もうと思ったらはしごを外されていました。ds14050です。
自分は最適化のために壊れたり、ミスの起こりやすい造りになったりして 禍根を残すくらいなら何もしない方がましだという考えでコメントしています。最適化が目的ではありませんが妥当な最適化を否定するつもりもありません。(脱線。たぶん「最適化」よりも「合理化」のほうが正しい)
せっかくなので案を書いておきます。 色名の取得を GetDefaultColorInfoから GetColorInfoName一本に切り離せるのが最善なのは変わりませんが、いつ SetColorInfoName相当の処理を行うのか判断が無理なら GetColorInfoNameと GetCachedColorInfoNameの二本立てにすると、色名が欲しい人間にとってそこそこわかりやすいのでないでしょうか。
Log in to post a comment.
項目名のみを更新するようにしました。
また、ヘッダとassert()を追加しました。
言語DLLを切り替えたときに項目名が変更されるのを確認しました。
ColorInfo構造体のメンバ変数で名前をを配列で確保している部分をポインタに変更しました。
共有メモリと文字列のコピー処理が削減できます。
コードの流れを見つけるのも追いかけるのも難しいのですが、
struct DLLSHAREDATA.m_Types[i].m_ColorInfoArr[j].m_pszName
はどのプロセスからもアクセス可能なポインタになっているでしょうか。
初期化は CType.cpp, CType_*.cppで行われ、アクセスは主に CType.h
の CTypeConfigを通して行われるようです。おそらく。
また枝葉ですが、szが zero-terminated stringの意だとすると
std:tstringメンバのプリフィックスとしては相応しくないと思います。
sか、それが structと紛らわしいなら、strはどうでしょうか。
ColorInfo構造体からメンバ変数(m_szName)を削除し、
項目名は関数経由で取得するようにしました。
void SetColorInfoName( int nIndex )に関して、
名前とその有りように改善の余地があると思います。
1.setterでありながらセットする値を受け取らない点
2.利用者にとって呼ぶ価値・理由がなく、.cpp内に隠蔽すべきであると考えられる点
1については Init、Re-set、Prepareなどが候補です。
2については GetColorInfoName内でどうにか必要性の有無を判断できないでしょうか。
trunk2_fix_typecolor_b.patchについて、
色指定リストが初期化されて表示される件とは別の話なので
このticket内での対応は取り下げたいと思います(別件対応)。
また、共有メモリと文字列のコピー処理削減の対応については、
ds14050さんがよい案をお持ちのようなので、お任せしたいと思います。
(自分は手を引きます)
trunk2_fix_typecolor.patch
[r3471]でcommitしました。
Related
Commit: [r3471]
ましな案を思いついて書き込もうと思ったらはしごを外されていました。ds14050です。
自分は最適化のために壊れたり、ミスの起こりやすい造りになったりして
禍根を残すくらいなら何もしない方がましだという考えでコメントしています。最適化が目的ではありませんが妥当な最適化を否定するつもりもありません。(脱線。たぶん「最適化」よりも「合理化」のほうが正しい)
せっかくなので案を書いておきます。
色名の取得を GetDefaultColorInfoから GetColorInfoName一本に切り離せるのが最善なのは変わりませんが、いつ SetColorInfoName相当の処理を行うのか判断が無理なら GetColorInfoNameと GetCachedColorInfoNameの二本立てにすると、色名が欲しい人間にとってそこそこわかりやすいのでないでしょうか。
Last edit: ds14050 2013-11-30