- 1
- 2
- 3
- 4
- 5
- 6
int wordLen(const char* word)
{
int i=-1;
while(word[++i]!='\0'&&word[i]!='\n');
return i;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+8
int wordLen(const char* word)
{
int i=-1;
while(word[++i]!='\0'&&word[i]!='\n');
return i;
}
Типичная лаба, но как же смешно это увидеть спустя некоторое время
+29
//thirteen
Cluster cl;
Cluster empty;
I--;
if(distances.size()){
for (int i = 0; i < (Lmax < distances.size() ? Lmax : distances.size()); ++i){
cl.X(( clusters.at(distances.at(i).first.first).X()*clusters.at(distances.at(i).first.first).Points().size() + clusters.at(distances.at(i).first.second).X()*clusters.at(distances.at(i).first.second).Points().size())/(clusters.at(distances.at(i).first.first).Points().size() + clusters.at(distances.at(i).first.second).Points().size()));
cl.Y(( clusters.at(distances.at(i).first.first).Y()*clusters.at(distances.at(i).first.first).Points().size() + clusters.at(distances.at(i).first.second).Y()*clusters.at(distances.at(i).first.second).Points().size())/(clusters.at(distances.at(i).first.first).Points().size() + clusters.at(distances.at(i).first.second).Points().size()));
if(clusters.at(distances.at(i).first.second).Number() != -1 && clusters.at(distances.at(i).first.first).Number() != -2){
cl.Points() = clusters.at(distances.at(i).first.second).Points();
clusters.at(distances.at(i).first.second) = cl;
clusters.at(distances.at(i).first.second).Number(-1);
for (std::vector<Point>::iterator j = clusters.at(distances.at(i).first.first).Points().begin(); j != clusters.at(distances.at(i).first.first).Points().end(); ++j)
{
clusters.at(distances.at(i).first.second).Points().push_back(*j);
}
clusters.at(distances.at(i).first.first) = empty;
n_c--;
}
}
for (std::vector<Cluster>::iterator i = clusters.begin(); i != clusters.end(); ++i){
if(i->Number() == -2){
i = clusters.erase(i);
}
i->Number(i - clusters.begin());
if(I)i->Points().clear();
if(i == clusters.end())break;
}
}
//fourteen
Кусок алгоритма isodata
+24
any<
mpl::vector<
copy_constructible<>,
typeid_<>,
incrementable<>,
ostreamable<>
>
> x(10);
++x;
std::cout << x << std::endl; // prints 11
The library provides concepts for most C++ operators, but this obviously won't cover all use cases; we often need to define our own requirements. Let's take the push_back member, defined by several STL containers.
BOOST_TYPE_ERASURE_MEMBER((has_push_back), push_back, 1)
void append_many(any<has_push_back<void(int)>, _self&> container) {
for(int i = 0; i < 10; ++i)
container.push_back(i);
}
Я ждал этого! В С++ добавили dynamic из сишарпика.
+34
class A
{
public:
unsigned int m_value;
inline bool operator != ( const A & value )
{
unsigned int temp;
temp = 0 != ( m_value != value.m_value );
return 0 == temp;
}
inline bool operator == ( const A & value )
{
unsigned int temp;
temp = 0 != ( m_value == value.m_value );
return 0 != temp;
}
};
Фрагмент кода одной коммерческой библиотеки. Имя класса изменено, 100500 прочих методов вырезано, но они похожи на эти.
Я не буду акцентировать внимание на том, что операторы невозможно использовать для константных объектов, даже не буду говорить о странном способе сравнения целых чисел... Но я упомяну о том, что 'operator !=' работает немножко не так, как руссо-индусы ожидали.
+14
int error = (unsigned)-1;
int x, y, w, h;
x = y = w = h = error;
stream >> x >> y >> w >> h;
if(x == error || y == error || w == error || h == error)
...
Не нашёл, как по-другому обрабатывать ошибки текстовых командах.
+16
// Lock the write mutex, to provide consistency of data
#define LOCK \
if (_ugb) { \
if (pthread_mutex_lock(&_write_mutex) == EINVAL) \
ASSERT(0); \
}
// Unlock write mutex when data sent
#define UNLOCK \
if (_ugb) { \
if (pthread_mutex_unlock(&_write_mutex) == EINVAL) \
ASSERT(0); \
}
// Пример использования
void socket::add_var(uint16_t code, const void *buffer, uint32_t length)
{
LOCK
try
{
DEBUG_I(Vblock, "Sending code 0x%X of size 0x%X\n", code, length);
send(&code, sizeof(code));
send(&length, sizeof(length));
send(buffer, length);
}
catch (const error & ve)
{
UNLOCK
DEBUG_E(Vblock, "Caught an exception!\n");
throw;
}
catch (...)
{
UNLOCK
}
UNLOCK
}
OK_BOOST_LOCK_A_MUTEX
+16
for(int i=0;i<World::size;i++)
{
for(int u=0;u<World::size;u++)
{
//Задаётся зерно для генерации случайных чисел
srand(GetTickCount()*i*u);
//Задаются случайные значения всем точкам от 0*0.1-10, до 100*0.1-10
World::data[i][u]=(rand()%100)*0.1f-10.0f;
}
}
http://habrahabr.ru/post/183986/
+20
#include <iostream>
enum Quiet { LOG };
template<typename T>
Quiet operator <<(Quiet o, T) {
return o;
}
static inline Quiet operator <<(Quiet o, std::ostream &(*)(std::ostream &)) {
return o;
}
int main() {
LOG << "Hello world!" << std::endl;
return 0;
}
Измыслил сегодня вот такую вот затычку для выключения логгирования
+21
class socket_exception
{
public:
char *buf;
int ret;
socket_exception()
{
buf=new char[10000];
ret=RET_OK;
}
socket_exception(char *b, int r)
{
buf=new char[10000];
snprintf(buf,9999,"%s",b);
ret=r;
}
socket_exception(vsocket_exception &ex)
{
buf=new char[10000];
snprintf(buf, 9999, "%s", ex.buf);
ret=ex.ret;
}
const char * what (){return buf;}
int get_ret(){return ret;}
~socket_exception(){delete[] buf;}
};
фрактал
+9
void SillyThread::run()
{
forever
{
// ... a test ...
}
}
void CrazyThread::run()
{
forever
{
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
if(qrand() % 2 == 0)
{
// ... a test ...
}
}
}
не совсем говно, но имена и структука прикололи. из кода стресс-теста PDF библиотеки poppler.