- 1
- 2
- 3
- 4
- 5
- 6
typedef enum
{
FFALSE = 0,
TTRUE,
MMAYBE
} Truth_t;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
Всего: 94
+188
typedef enum
{
FFALSE = 0,
TTRUE,
MMAYBE
} Truth_t;
ну почти квантовое программирование.
ЗЫ да, это из С++ программы.
+175
class BalanceValue
{
/* ... */
BalanceValue( int pFamilyGroupId,
int ContractId,
int pProfileId,
int pSncode,
long pPurchaseSeqNo,
int pBundledProductId,
time_t pCreationDate,
time_t pNextresetDate,
char pState,
double pAggregate,
double pCredit,
double pInitialCredit,
double pReservation,
char pColor,
double pProrateFactor,
int pCurrencyId,
int pUomId,
time_t pSnapshotDate,
unsigned long pSequenceNumber,
time_t pValidFrom,
time_t pValidTo,
int pPricingAlternative,
int pCocTariffId,
time_t pLastresetDate,
double pLateCallAggr );
/* ... */
void getAllValues( int& pContractId,
int& pProfileId,
int& pSncode,
long& pPurchaseSeqNo,
int& pBundledProductId,
time_t& pNextResetDate,
char& pState,
double& pAggregate,
double& pCredit,
double& pInitialCredit,
double& pReservation,
char& pColor,
double& pProRateFactor,
int& pCurrencyId,
int& pUomId,
time_t& pSnapShotDate ,
unsigned long& pSequenceNumber,
time_t& pValidFrom,
time_t& pValidTo,
int& pPricingAlternative,
int& pCocTariffId,
time_t& pLastResetDate,
double& pLateCallAggr );
/* ... */
};
чудо интерфейс. 25 параметров у конструктора, 23 параметров (рефернсы!) у геттера. кто больше?
ЗЫ как оба реализованы можете сами догадатся. и еще несколько других методов в подобном стиле.
ЗЗЫ да, есть и нормальные геттеры.
ЗЗЗЫ нет, другого конструктора нету.
ЗЗЗЗЫ нет, разнести значение по мелким структурам, более приемлимым человеческому мозгу, народ не догадывается. не наш так сказать стиль. (да, есть естественная групировка параметров по источнику откуда они берутся.)
+142
case 43: /* + */
sum_up += sum_up > 1 ? 0 : 1;
return 1;
case 45: /* - */
sum_up -= sum_up < 1 ? 0 : 1;
return 1;
Если выше/ниже лимита то добавляем/отнимаем ничего.
ЗЫ sum_up это переменная контролирующая уровень вербозности (0,1,2) специальной мониторной проги. кнопками +/- можно интерактивно контролировать. К слову, сверху это уже правленый код. Оригинальный оригинал:
if (c == 43) { sum_up = sum_up > 1 ? sum_up : ++sum_up; return 1; }
if (c == 45) { sum_up = sum_up < 1 ? sum_up : --sum_up; return 1; }
+105
if ( (value[0] - 'N') == 0 || (value[0] - 'n') == 0 )
val = 0;
if ( (value[0] - 'Y') == 0 || (value[0] - 'y') == 0 )
val = 1;
нет, просто сравнить - это слишком скучно и неоригинально.
ЗЫ от автора http://govnokod.ru/5034
+163
class AnotherDammLoggerClass {
public:
// ...
static inline char *strtime()
{
// method is twice as fast as strftime)
static const int ASCII_OFFSET=48;
static char buffer[32]="";
struct timeval tv;
struct tm *lt;
if ( 0 == gettimeofday(&tv,NULL) )
{
lt=localtime(&tv.tv_sec);
int i=0;
/* year */
buffer[i++]=(lt->tm_year%100/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_year%10)+ASCII_OFFSET;
/* month */
buffer[i++]=((lt->tm_mon+1)/10)+ASCII_OFFSET;
buffer[i++]=((lt->tm_mon+1)%10)+ASCII_OFFSET;
/* day */
buffer[i++]=(lt->tm_mday/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_mday%10)+ASCII_OFFSET;
/* separator */
buffer[i++]='.';
/* hours */
buffer[i++]=(lt->tm_hour/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_hour%10)+ASCII_OFFSET;
/* minutes */
buffer[i++]=(lt->tm_min/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_min%10)+ASCII_OFFSET;
/* seconds */
buffer[i++]=(lt->tm_sec/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_sec%10)+ASCII_OFFSET;
/* separator */
buffer[i++]='.';
/* microseconds */
buffer[i++]=(((tv.tv_usec)%1000000)/100000)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%100000)/10000)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%10000)/1000)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%1000)/100)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%100)/10)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%10))+ASCII_OFFSET;
/* delimiter */
buffer[i++]=(char)0;
}
else
{
strcpy(buffer, "<no time>");
}
return buffer;
}
// ....
}
оптимизируем производительность. коммент "twice as fast as strftime" порадовал: вместо того что бы редундантные вызовы поубирать, давайте ручками перепишем. для пущей красоты сделано inline (и еще скапипазджено в три других места проекта).
потому что в логгере strftime() наверное жутко тормозил - например по сравненю с записью сообщений на диск.......
+105
#define C_WRONG -2000
....
int tttt_atoi(char* p_string){
int result = C_WRONG;
if ( *p_string < '0' || *p_string > '9' )
return C_WRONG;
result = atoi(p_string);
return result;
}
double tttt_atof(char* p_string){
double result = C_WRONG;
result = atof(p_string);
if (result!=0){
return result;
}
else{
if(strcmp(p_string,"0.0")==0 || strcmp(p_string,"0")==0 || strcmp(p_string,"0.")==0){
return result;
}
else{
return C_WRONG;
}
}
}
и вы посмейтесь. или facepalm'нитесь. синтакс оригинала.
+165
class cSG5DataException ... {
cSG5DataException(CTstatus Status, CTsymbol Error,
CTsymbol SubError, std::string Description, ...)
{
/* форматирование сообщения */
}
/* виртуальный деструктор наличиствует */
};
class cExcKVSDuplicateKey : public cSG5DataException {
/* пусто */
};
/* код */
throw (cExcKVSDuplicateKey*) new cSG5DataException( CT_statusFail,
CT_errorObjectExists,
CT_errorObjectExists,
"cKVSet_STL_map::insert( CTint k, Value& v ), %d is already in the map",k);
вот так хитро народ обходит проблему писания конструкторов. темплейт фактори функцию сделать не догадались. но С-style конверсию типов - пожалуйста. мне честно говоря и сложно то себе представить что это как-то работать может. смена типа поинтера то на тип объекта не влияет.
+166
// 0. original version:
struct Subscriber {
ServiceConfig *services;
};
struct ServiceConfig {
};
// reported problem: as per doc, Customer may have multiple service configurations, yet we can configure only one.
// 1. next "fixed" version, as delivered to the customer:
struct Subscriber {
};
struct ServiceConfig {
Subscriber *subs;
};
// ticket reopened: wtf. changing services for one customer, affects others!!
// 2. next "fixed" version, as delivered to the customer:
struct Subscriber {
ServiceConfig *services;
};
struct ServiceConfig {
};
// ticket reopened: @#$%^& [*BEEP*] @#$%^& [*BEEP*] @#$%^&*
// 3. finally:
struct Subscriber {
};
struct ServiceConfig {
};
struct SubscriberServiceConfig {
Subscriber *subs;
ServiceConfig *services;
};
если бы лично не лицезрел эту переписку (навечно задокументированую в аналах вершн контрол) между нашими разработчиками и консультантами работающими на инсталяции у кастомера, нивжисть бы не поверил что такое даже может иметь место.
самое страшное в этой истории, что консультанты разработчикам с самого начала сказали что в коде данные организованы неправильно по сравнению с тем как данные хранятся в базе.
+163
CTvoid cSG5Exception::Get (CTstatus& Status,
CTsymbol& Error,
CTsymbol& SubError,
string& Description)
{
if (Description.c_str() != NULL) {
Description = m_description;
}
Status = m_status;
Error = m_error;
SubError = m_subError;
}
итолианский с++ панимаш, рагацци.
что они хотели в строках 6-8 сказать кануло в лету.
и вместо 4 человеческих геттеров один бесполезный заху*чили. (бесполезный тем что четыре переменные всегда надо под рукой иметь.)
+164
void Attr::setConvertedValue(std::string pValue)
{
/* ............. - BEGIN - Place the HTML code instead of the */
/* plain values. This is needed since special XML characters */
/* might exist. */
for(int i = 0; i < pValue.length(); i++)
{
int ascii = (int)pValue[i];
if(!( (ascii == 32 ) ||
(ascii >= 48 && ascii <= 57) ||
(ascii >= 65 && ascii <= 90) ||
(ascii >= 97 && ascii <= 122) ) )
{
if( ascii < 0 )
ascii += 256;
std::ostringstream stream;
stream << ascii;
std::string newString = stream.str();
newString = "&#" + newString + ';';
pValue.replace(i, 1, newString);
i += newString.length() - 1;
}
}
/* ............. - END - Place the HTML code instead of the */
/* plain values. This is needed since special XML characters */
/* might exist. */
mConvertedValue = pValue;
}
я стою на асфальте, ноги в лыжы абуты.
мы эскайпим значения для ХМЛ.
вы тут посмейтесь, а я пошел головой об стенку стучатся.
ЗЫ пысано в Бразилии.