А во тест
i5 750 @ 2.67 Ghz Speed compare: 200000000 dynamic cast ----------------------------------------------- dynamic_cast 27.65M casts per second (r:006E15C0) reflection::cast 200.20M casts per second (r:006E15C0) reflection::cast faster that dynamic_cast x7.24
Debian Linux 5.00 CPU: Intel E6800 @ 3.00 Ghz g++ (Debian 4.3.2-1.1) 4.3.2 Speed compare: 200000000 dynamic cast ----------------------------------------------- dynamic_cast 44.54M casts per second (r:0x804f428) reflection::cast 256.41M casts per second (r:0x804f428) reflection::cast faster that dynamic_cast x5.76
Извините за некропостинг, но может у кого-то остался архив с исходниками данной либы? Сайт автора не работает, скачать по ссылке выше по треду невозможно.
да, надо бы заплатить за домен :)
Спасибо )
Похоже тут в библиотеке ошибка небольшая с ассёртом, оповещающем о возникновении коллизии.
assert(strcmpFast( c_str( ), size( ), other.c_str( ), other.size( )) == 0 && "Need update hash function, collisions must be resolved !");
strcmpFast возвращает true, если строки равны, поэтому == 0 нужно убрать. Ты, наверное, когда стандартный strcmp() поменял на strcmpFast(), забыл условие переделать )
Faveris
> стандартный strcmp() поменял на strcmpFast(), забыл условие переделать )
ага :) все так, надо ==0 убрать
А текст документа-то простым смертным так и не доступен. :(
Мой вариант:
hpp http://www.everfall.com/paste/id.php?p8eff666jchv
cpp http://www.everfall.com/paste/id.php?vipcny8p6qr4
пример
/* =========================================================================== Enforcer-Engine Source Code Copyright (C) 2011-2012 Enforcer-Engine Team. =========================================================================== */ #include "efEngine.h" int main(int, char**) { efObject* object = new efObject( ); efReader* reader = new efReader( ); if( object->IsA( efObject::Type)) printf( "ok...\n"); else printf( "fail...\n"); if( !object->IsA( efReader::Type)) printf( "ok...\n"); else printf( "fail...\n"); if( reader->IsA( efReader::Type)) printf( "ok...\n"); else printf( "fail...\n"); if( !reader->IsA( efObject::Type)) printf( "ok...\n"); else printf( "fail...\n"); if( !object->IsDerived( efReader::Type)) printf( "ok...\n"); else printf( "fail...\n"); if( reader->IsDerived( efObject::Type)) printf( "ok...\n"); else printf( "fail...\n"); system( "pause"); efObject* c0 = reader->Cast<efObject>( ); efReader* c1 = object->Cast<efReader>( ); // assert, bingo return 0; }
С PowerPC засада какая-то (хотя чёрт - я ж в 32-битном режиме скомпилил).
MacOS X 10.5 CPU: PowerPC G5 @ 2.00 Ghz g++ (Apple 4.2.1) (-O2, -O3 - результаты похожие) Speed compare: 200000000 dynamic cast ----------------------------------------------- dynamic_cast 32.61M casts per second (r:0x1001c0) reflection::cast 26.09M casts per second (r:0x1001c0) reflection::cast faster that dynamic_cast x0.80
А рядом виндовс-коробка:
Win7 x64 CPU: AMD Athlon 7850+ @ 2.8 Ghz g++ (equation.com 4.6.0) (-O2) Speed compare: 200000000 dynamic cast ----------------------------------------------- dynamic_cast 20.45M casts per second (r:000000000047FDD0) reflection::cast 101.78M casts per second (r:000000000047FDD0) reflection::cast faster that dynamic_cast x4.98
Здравствуйте. Прошу прощения за такое гробокопательство, но, может быть, у кого-нибудь остался архив reflectionLibrary_v4.rar? Хотел скачать, да вот только по ссылке в Dropbox уже файла нет, сайта sergeymakeev.com больше нет, в копиях на Web Archive тоже этого файла нет.
Возьми версию 3, она есть в веб архиве. Разница, судя по теме, только в хеш функции.
entryway
Да, есть версии с 1 по 3, но хотелось бы найти и 4, там не только другая хэш-функция, но и "поправил баги по мелочи, пример с DLL сделал".
Тема в архиве.