29 April, 2009

Swap при помощи XOR

Обмен двух переменных без использования дополнительной переменной с помощью XOR. http://en.wikipedia.org/wiki/XOR_swap_algorithm. Забавно то, что как-то до сих пор об этом не думалось.

11 April, 2009

Wildcard comparer

Все наверное писали что-то подобное на тестах при поступлении на работу. И вот свершилось, wildcard comparer реально потребовался. Особенности алгоритма: несколько следующих друг за другом * считаются одной.
bool WildcardCompare(LPCWSTR pFilter, LPCWSTR pString)
{
    while (*pString && *pFilter != L'*')
    {
        if (*pFilter != *pString && *pFilter != L'?')
            return false;
 
        ++pFilter;
        ++pString;
    }
 
    LPCWSTR pBaseFilter;
    LPCWSTR pBaseString;
 
    while (*pString)
    {
        if (*pFilter == L'*')
        {
            if (!*++pFilter)
                return true;
 
            pBaseFilter = pFilter;
            pBaseString = pString;
        }
        else if (*pFilter == *pString || *pFilter == L'?')
        {
            ++pFilter;
            ++pString;
        }
        else
        {
            pFilter = pBaseFilter;
            pString = ++pBaseString;
        }
    }
 
    while (*pFilter == L'*')
        ++pFilter;
 
    return !*pFilter;
}

03 April, 2009

Разные команды, разный подход к одной задаче

Очередная несовместимость .NET Profiling API для .NET Framework и .NET Compact Framework. Важный этап каждого приложения - это его завершение. И тут мы снова видим совершенно разное поведение. При завершении .NET Framework я не вижу ThreadDestroyed для главного thread и не наблюдаю вызовов AppDomainShutdownStarted/AppDomainShutdownFinished для appllication domain приложения. C этим в принципе можно смириться, так как есть вызов Shutdown означающий завершение приложения. С .NET Compact Framework все сложнее. Я наблюдаю завершение главного thread, после чего создается специальный thread для выгрузки application domain приложения и АСИНХРОННО по отношению как минимум к вызову AppDomainShutdownFinished вызывается Shutdown в главном thread. Что на мой взгляд есть очень серьезный bug.