- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
std::string s1;
std::string s2;
int ret = strcmp(s1.c_str(), s2.c_str()); //А здесь мы сравниваем строки
if (ret == 0)
{
....
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+7
std::string s1;
std::string s2;
int ret = strcmp(s1.c_str(), s2.c_str()); //А здесь мы сравниваем строки
if (ret == 0)
{
....
}
+7
if(isMoving)
{
std::map<int, unsigned char> dirToFrame = boost::assign::map_list_of(1, 10)(2, 5)(3, 6)(4, 7)(5, 8)(6, 9)(7, 12)(8, 11);
if(dir >= 1 && dir <= 10)
return dirToFrame[dir];
throw std::string("Something very wrong1.");
}
else //if(isMoving)
{
std::map<int, unsigned char> dirToFrame = boost::assign::map_list_of(1, 13)(2, 0)(3, 1)(4, 2)(5, 3)(6, 4)(7, 15)(8, 14);
if(dir >= 1 && dir <= 10)
return dirToFrame[dir];
throw std::string("Something very wrong1.");
}
Кусок кода из open source игры. Выбирает кадр спрайта, в зависимости от направления героя. В ревизии, предшествующей этой, использовался switch.
+14.1
bool IsTranslucent() const
{
return !!Translucent;
}
Зачем двойное отрицание?
Наверное потому, что Translucent имеет тип BOOL из windows.h и приведение ее к bool даст нежелательный warning.
+6.9
#ifndef SOCHET_H
#define SOCHET_H
// Сдвигает самую младшую единицу в сторону младшего разряда
#define shiftLast1Right(x) ( (x-1)^((x^(x-1)) >> 2) )
// Дописывает 1 после самой младшей единицы
#define add1AfterLast1(x) ( x | ((x^(x-1))+1) >> 2 )
template<class T>
class Sochet
{
public:
T value;
//////////////////////////////////////////////////////////////////////////
Sochet():value(0) { }
Sochet(int n, int k) {
firstTurn(n, k);
}
~Sochet() {
value = 0;
}
//////////////////////////////////////////////////////////////////////////
// Первая комбинация
// В первоначальной ситуации все К единиц располагаются в старших битах
void firstTurn(int n, int k) {
value = ( ( T(1) << k ) - 1 ) << (n - k);
}
// Нахождение следующей комбинации
// Возвращает false в случае последней комбинации
bool nextTurn()
{
// Отлов последней комбинации
if (value & (value+1) == 0)
return false;
// Условие по младшему биту: 1 или 0
if (value & 1)
{
value >>= 1;
nextTurn();
value = add1AfterLast1(value << 1);
} else
value = shiftLast1Right(value);
return true;
}
}
#endif // SOCHET_H
Шаблон перебора всех сочетаний/выборок в много разрядных числах.
Пример перебираемых чисел для N=5, K=3:
11100
11010
11001
10110
10101
10011
01110
01101
01011
00111
// Код выглядит сочно(особенно дефайны), зато всё работает максимально быстро.
// Статья про этот алгоритм: http://k06a.blogspot.com/2009/04/blog-post_08.html
+12.1
DateTime get_date(const char * _sz_date, bool _b_trunc_year)
{
DateTime _obj_dt;
// "01/02/2003" - format of the data
string _str_date = _sz_date;
//--------------
string _str_month;
string _str_year;
int _n_day;
int _n_month;
int _n_year;
///--------------
bool _b_1 = false;
bool _b_2 = false;
size_t _n_pos_1 = 0;
size_t _n_pos_2 = 0;
///--------------
for (size_t _un_num = 0; _un_num < _str_date.size(); _un_num++)
{
if(_str_date[_un_num] == '/')
{
///-----------------
if(!_b_1)
{
_b_1 = true;
_n_pos_1 = _un_num;
continue;
}
///-----------------
if(_b_1 && !_b_2)
{
_b_2 = true;
_n_pos_2 = _un_num;
}
///-----------------
}
}
///--------------
if(!_b_1 || !_b_2)
{
return _obj_dt;
}
///--------------
_str_month = _str_date.substr( _n_pos_1 + 1, ( _n_pos_2 - _n_pos_1 ) - 1 );
_str_year = _str_date.substr( _n_pos_2 + 1, ( _str_date.size() - 1 ) - _n_pos_2 );
if(_b_trunc_year)
{
if(_str_year.size() >=4)
{
_str_year = _str_year.substr(2,2);
}
}
sscanf(_str_month.c_str(), "%d", &_n_month);
sscanf(_str_year .c_str(), "%d", &_n_year);
_n_day = 1;
_obj_dt = DateTime(_n_year,_n_month,_n_day);
return _obj_dt;
}
Парсим дату формата mm/dd/yyyy. Не все так просто в этой жизни.
+5
//...
string m_str_datum, m_str_zeit;
m_str_datum.assign(m_str_data , 22 , 6 );
m_str_zeit.assign(m_str_data , 28 , 6 );
m_str_datum = remove_spaces(m_str_datum) ;
m_str_zeit = remove_spaces(m_str_zeit);
string _str_year;
string _str_month;
string _str_day;
int _n_year;
int _n_month;
int _n_day;
_n_year = 0;
_n_month = 0;
_n_day = 0;
_str_day.assign(m_str_datum,0,2);
_str_month.assign(m_str_datum,2,2);
_str_year.assign(m_str_datum,4,2);
sscanf( _str_day.c_str() , "%d", &_n_day );
sscanf( _str_month.c_str(), "%d", &_n_month );
sscanf( _str_year.c_str() , "%d", &_n_year );
if (_n_year > 0 && _n_year < 50)
_n_year += 2000;
else if (_n_year >= 50 && _n_year < 100)
_n_year += 1900;
//...
string _str_hours;
string _str_minutes;
string _str_seconds;
int _n_hours;
int _n_minutes;
int _n_seconds;
_n_hours = 0;
_n_minutes = 0;
_n_seconds = 0;
_str_hours.assign(m_str_zeit,0,2);
_str_minutes.assign(m_str_zeit,2,2);
_str_seconds.assign(m_str_zeit,4,2);
sscanf( _str_hours.c_str() , "%d", &_n_hours );
sscanf( _str_minutes.c_str() , "%d", &_n_minutes );
sscanf( _str_seconds.c_str() , "%d", &_n_seconds );
DateTime _obj_start_time;
try {
_obj_start_time = DateTime(_n_year, _n_month, _n_day, _n_hours, _n_minutes, _n_seconds);
}
//...
Парсим дату ddmmyyhhnnss не по-детски. Код функции которая обрабатывает несколько сотен тысяч строк.
+20.7
.....
int i;
.....
int b=i/2;
if(i==b*2)//проверка на четность
{
.....
+3.3
class boolshit{
public:
boolshit(bool shit):_shit(shit){}
operator bool() const{return _shit;}
private:
bool _shit;
};
:)
+18.2
ProfileManager* man = Application::GetProfileManager();
_DESIRE(man); //гм. "Желать мужика". Ужос какой. Это не я написал, если чо. Это оно само
Вот в коде наткнулся, улыбнуло
+17
unsigned long f( unsigned long a ) {
while( (1 << 24) < a )
a -= (1 << 24);
return a;
}
Найден в дебрях старого проекта. Цель непонятна. Предположение -- обнулить старших 8-мь бит в 32-х битовом числе.