- 1
auto r=disable(reinterpret_cast<void*>(static_cast<Efrag*>(const_cast<Efrig*>(ef))));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+177
auto r=disable(reinterpret_cast<void*>(static_cast<Efrag*>(const_cast<Efrig*>(ef))));
Три мудреца в одном тазу
Пустились по морю в грозу.
Будь попрочнее старый таз,
Длиннее был бы мой рассказ.
..............Самуил Маршак
+147
#include <stdio.h>
int main(int t,int _,char*a)
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a
)&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_,
t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \
i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
Консольный вывод этой программы:
On the first day of Christmas my true love gave to me
a partridge in a pear tree.
On the second day of Christmas my true love gave to me
two turtle doves
and a partridge in a pear tree.
...
[Все не вместилось]
...
On the tenth day of Christmas my true love gave to me
ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the eleventh day of Christmas my true love gave to me
eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
On the twelfth day of Christmas my true love gave to me
twelve drummers drumming, eleven pipers piping, ten lords a-leaping,
nine ladies dancing, eight maids a-milking, seven swans a-swimming,
six geese a-laying, five gold rings;
four calling birds, three french hens, two turtle doves
and a partridge in a pear tree.
+175
template<class Exception>
bool GenerateException(const Exception* const e)
{
throw e;
delete e;
return true;
}
Продолжение цикла говнокодов про исключения из того же самого проекта.
Проблем от неё почти нет, тк в основном исключения генерятся так:
ExceptionТакойто e;
GenerateException(&e);
+169
class SeismicDriver {
void set2DVolume (GlData2DVol* vol = 0, bool reserv = false);
GlData2DVol* _glData2DVol; /**< Seismic 2D Line */
}
void SeismicDriver::set2DVolume (GlData2DVol* vol, bool reserv)
{
_glData2DVol = vol;
}
Наш подопытный китаец очень предусмотрительный. Если в будущем вдруг случится, что функции понадобится второй параметр типа bool - опа! - он уже есть :)
+162
class GlData2DLine
{
virtual std::vector<Vec2d> getDecimatedPoints();
protected:
std::vector<Vec2d> c_decimated_points;
}
std::vector<Vec2d> GlData2DLine::getDecimatedPoints()
{
return c_decimated_points;
}
class GlData2DLineOD : public GlData2DLine
{
virtual std::vector<Vec2d> getDecimatedPoints();
}
std::vector<Vec2d> GlData2DLineOD::getDecimatedPoints()
{
return c_decimated_points;
}
Наш любимый китаец увлекся ООП и полиморфизмом что забыл очевидное.
+161
/**
* Standard QWidget Constructor
*/
SeismicSelectionDG::SeismicSelectionDG(QWidget *parent)
: QDialog(parent), ui(new Ui::SeismicSelectionDG)
{
...
}
/**
* Destructor
*/
SeismicSelectionDG::~SeismicSelectionDG()
{
if(ui) delete ui;
}
/**
* Set title to dialog box
* @param title The title for dialog box
*/
void SeismicSelectionDG::setDialogTitle(const QString& title)
{
QDialog::setWindowTitle(title);
}
Обратим внимание как мой коллега китаец тщательно документирует код. метод setDialogTitle - в особенности. А учитывая что QDialog::setWindowTitle - библиотечный метод, необходимость оборачивать его в свой метод полностью отсутствует. Также глупость в деструкторе - для delete необязательно проверять указатель на 0.
+161
// из объявления класса
...
float _x_3DMin; /**< Min X value */
float _x_3DMax; /**< Max X value */
float _z_3DMin; /**< Min Z depth value */
float _z_3DMax; /**< Max Z depth value */
/* 2D seismic variables */
float _x_2DMin; /**< Min X value */
float _x_2DMax; /**< Max X value */
float _z_2DMin; /**< Min Z depth value */
float _z_2DMax; /**< Max Z depth value */
/* No seismic selection variables */
float _xMin; /**< Min X value */
float _xMax; /**< Max X value */
float _zMin; /**< Min Z depth value */
float _zMax; /**< Max Z depth value */
...
void SeismicSelectionDG::initMembers()
{
// initialise values
_x_3DMin = 0.0F;
_x_3DMax = 0.0F;
_z_3DMin = 0.0F;
_z_3DMax = 0.0F;
_x_2DMin = 0.0F;
_x_2DMax = 0.0F;
_z_2DMin = 0.0F;
_z_2DMax = 0.0F;
_xMin = 0.0F;
_xMax = 0.0F;
_zMin = 0.0F;
_zMax = 0.0F;
...
}
Ну и весь остальной код состоит из этих говно-паттернов. Об абстракциях товарищ понятия не имеет.
+162
SeismicDriver* SeismicSelectionDG::seismicDriver()
{
Exf2dMW* mw = Exf2dMW::getMW(this);
_seismicDriver = mw->seismicDriver();
if ( !mw || !_seismicDriver)
return 0;
return _seismicDriver;
}
Все тот же коллега китаец. Exf2dMW - класс главного окна приложения. Во-первых бесмыссленно проверять его на 0, потому что без него вообще бы ничего не работало, но и как видно проверяет его он все равно не там. Ну и проверка на 0 _seismicDrvier тоже лишняя. Итог никакие проверки не нужны да и вообще первую строку в методе можно перенести в конструктор а возвращать член класса _seismicDriver.
+162
//...
CString signature(pMsg->clipEvent.signature);
int indx = signature.Find('-');
if(!indx)
signature.Delete(indx);
indx = signature.Find('-');
pEvent->eventData.signature.doorNum = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
pEvent->eventData.signature.eventType = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
pEvent->eventData.signature.eventID = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
pEvent->eventData.signature.itemNumber = _ttoi(signature.Left(indx));
signature.Delete(0, indx+1);
indx = signature.Find('-');
CString dateTimeStr;
dateTimeStr = signature.Mid(5, 2);
dateTimeStr += '/';
dateTimeStr += signature.Mid(8, 2);
dateTimeStr += '/';
dateTimeStr += signature.Left(4);
dateTimeStr += ' ';
dateTimeStr += signature.Mid(11, 2);
dateTimeStr += ':';
dateTimeStr += signature.Mid(14, 2);
dateTimeStr += ':';
dateTimeStr += signature.Mid(17, 2);
pEvent->eventData.signature.eventDateTime = DEM_getTimeDateStampFromTimeDateString(dateTimeStr);
signature.Delete(0, 20);
pEvent->eventData.signature.cameraIndex = _ttoi(signature);
//...
инициализация числовых переменных из строки с заранее известным форматом...
так как автор "кончал на MFC", с функцией sscanf западло было работать
+161
// Часть первая. Объявления. Exceptions.hpp
template <typename E>
struct ExeptionKeeper
{
E * exptn;
ExeptionKeeper(E * ex)
{
exptn = ex;
}
~ExeptionKeeper()
{
if(exptn != NULL )
{
delete exptn;
}
}
E * operator -> ()
{
return exptn;
}
};
#define EX_TRY(XX) try { XX }
#define EX_CATCH(TT, NAME, XX) catch (TT *_ex) { ExeptionKeeper<TT> NAME(_ex); XX }
/// Часть вторая. Использование. ModelsHelper.cpp
.... // код
EX_TRY
(
............
TestParams(args); // кидает new ParamsException в случае неудачи
............
TestFunctions(funclist); // Кидает new FuncsException ...
............
//// тут еще есть вызовы, кидающие исключения
............
)
EX_CATCH
( ParamsException, exp,
GLogger(levelerror).Log("Invalid params for model ", exp->model(), " [", exp->paramlist().str(), "]");
)
EX_CATCH
( FuncsException, exp,
GLogger(levelerror).Log("Invalid functions for model ", exp->model(), " [", exp->funclist().str(), "]");
)
EX_CATCH
( LevelsException, exp,
GLogger(levelerror).Log("Invalid levels for model ", exp->model(), " [", exp->levelslist().str(), "]");
)
EX_CATCH
( .... , exp,
........
)
.... // код
И снова на тему исключений.
Прислал приятель. Какой-то софт для аэропортов.
Комменты на русском мои.