ホーム » 2013 » 12月

月別アーカイブ: 12月 2013

2013年12月
1234567
891011121314
15161718192021
22232425262728
293031  

カテゴリー

アーカイブ

ブログ統計情報

  • 99,499 アクセス


String_Split

    MB MFC MB STL WC MFC WC STL
99103040 5714 0 20 0 70
99103036 14192 10 130 10 380
99103032 27636 10 400 20 1400
99103051 41128 20 900 20 3200
99103026 65388 50 2400 50 7200

単位は m sec

表では MFC と表現しているが,実際は CStringArray を利用している程度.
ちょっと意外だったのが,STL のコードで,UNICODE 版が MBCS 版の 3 倍以上になってしまっている.


STL を利用しているコードは以下の通り.
std::vector<tstring> String_Split (const tstring& str_,LPCTSTR sp=_T(" \r\n"))
{
  std::vector<tstring> strAry ;
  tstring str = str_ ;
  {
    tstring::size_type spPos = tstring::npos ;
    while ((spPos=::String_FindFirstOf(str,sp)) != tstring::npos) {
      if (str.empty()) { break ; }
      TCHAR fc = str[0] ;
      if (fc == _T(‘\"’) || fc == _T(‘\”)) { // "—" or ‘—‘
        if ((spPos=::String__Find(str,fc,1)) == tstring::npos) {
          break ;
          }
        if ((spPos = ::String_FindFirstOf(str,sp,spPos)) == tstring::npos) {
          break ;
          }
        }
      tstring splitS = str.substr(0,spPos) ;
      strAry.push_back(splitS) ;
      str = str.substr(spPos+1) ;
      if (str.empty()) { break ; }
      }
    if (!str.empty()) {
      strAry.push_back(str) ;
      }
    }
  return strAry ;
  }


String_Join も同様だが,MFC 版 StringArrayToLine1 の 1 割程度なので,このままとする.
MFC 版 StringArrayToString は十分速い.


StrAryFn.hxx

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

3DS

3DS 出力で正しくないのが生成されたので,バイナリを解析した時のメモ


http://www.dcs.ed.ac.uk/home/mxr/gfx/3d/3DS.spec
http://www.martinreddy.net/gfx/3d/3DS.spec

Chunk ID 2  
データ長 4 この次のデータの長さ + 6
データ    

 
4D4D
  3D3D
    AFFF
      A000        名称
      A020   15
        0011  9    RGB
    AFFF 
    …
    4000          名称
      4100    
        4110      頂点情報 ( WORD 頂点数 , [ float x , y , z ] )
        4140      テクスチャ ( WORD 点数 , [ float x , y ] )
        4160      
        4120      面情報 ( WORD 面数 , [ WORD 3 頂点のインデックス , WORD 面の情報 ] )
          4130    材質名 , WORD 面数 , [ WORD 面のインデックス ]
          4130        
          …
    B000      
      …


頂点数が WORD を超えていたのが原因.
PgonsA_To3DS の objIs1==TRUE で,vp3Ary.GetCount() >= 0x10000 の時,PgonsA_To3DS (…,FALSE,…) .

Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.