【小ネタ】大文字と小文字を無視した文字列比較

2013年7月8日

更新するようなネタがないので、コネタでものっけときます。
枯れ木も山の賑わいな如く、糞な記事もブログの賑わいです。

strcmpならこんな感じ

template<typename _TYPE>
long strcmp_nocase( const _TYPE * _param1, const _TYPE * _param2 )
{
    std::basic_string<_TYPE>    param1(_param1);
    std::basic_string<_TYPE>    param2(_param2);
    std::transform( param1.begin(), param1.end(), param1.begin(), toupper );
    std::transform( param2.begin(), param2.end(), param2.begin(), toupper );
    return param1.compare( param2 );
};

strncmpならこんな感じ

template<typename _TYPE>
long strncmp_nocase( const _TYPE * _param1, const _TYPE * _param2, const size_t length )
{
    std::basic_string<_TYPE>    param1(_param1);
    std::basic_string<_TYPE>    param2(_param2);
    std::transform( param1.begin(), param1.end(), param1.begin(), toupper );
    std::transform( param2.begin(), param2.end(), param2.begin(), toupper );

    return param1.compare(0, length, param2.c_str(),length );
};

別にこだわりのポイントはなく、wchar_tかcharかわからんので、templateにしてるというだけですね。

C++ | majin | 19:20 | Comments (0)

templateで遊ぼう 『共有メモリ』

2013年1月6日

今更感バリバリだし車輪の再発明もいいとこでしょうが、車輪が何故まわって、それが便利であるのかを理解することこそ重要だと考えているということもあり、C++のtemplateで遊んだ成果をちょこちょこと出して行こうかと思っています。

仕事でC++を使わなくなってしまったので、忘れないための措置でもありますが、無駄に長いこといじって来た言語だし、ちょっと吐き出してみるのも悪くないかなあと考えています。

初回は、アプリケーション間で共有されるメモリの実装例です。
Win32用で、ファイルマッピングオブジェクトを利用しています。

ここで出してるコードはnyslってやつでお願いいたします。もちろん動作保証なんてしませんし、なんかあっても知ったこっちゃ無いです。

(more…)

C++ | majin | 01:58 | Comments (0)

素朴な疑問

2011年8月18日

下記のようなコードが有るとして、
TurboBoostがあるプロセッサだとどういう数値を示すんだろう。
やってみたいが、そういう機械は残念ながら持っていない。

CPUの実クロック取得するコード

double GetCPURealClock( unsigned int WaitTime = 1000 )
{
    if( WaitTime == 0 )
        WaitTime = 1000;
    LARGE_INTEGER startClock, currentClock;
    long double result;

    // 開始時間の保存
    DWORD StartTime = timeGetTime();

    // 初期のクロックサイクルを取得する
    __asm
    {
        rdtsc;
        mov startClock.LowPart, eax;
        mov startClock.HighPart, edx;
    }

    // WaitTimeミリ秒ウェイト
    while ( true ) if ( timeGetTime() - StartTime > WaitTime ) break;

    // WaitTimeミリ秒後のクロックサイクルを取得する
    __asm
    {
        rdtsc;
        mov currentClock.LowPart, eax;
        mov currentClock.HighPart, edx;
    }

    // MHzに変換
    currentClock.QuadPart= ( (currentClock.QuadPart- startClock.QuadPart) / 1000000);
    // MHは一秒間なので、1000/WaitTime倍する
    currentClock.QuadPart *= 1000;
    currentClock.QuadPart /= WaitTime;

    result = currentClock.QuadPart;
    return result;
}
C++ | majin | 16:19 | Comments (0)
Copyright © MAJIN_T
Powered by WordPress