-
+14
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
bool Item::IsBoundByEnchant() const
{
// Check all enchants for soulbound
for (uint32 enchant_slot = PERM_ENCHANTMENT_SLOT; enchant_slot < MAX_ENCHANTMENT_SLOT; ++enchant_slot)
{
if (enchant_slot > PRISMATIC_ENCHANTMENT_SLOT || enchant_slot < PROP_ENCHANTMENT_SLOT_0) // not holding enchantment id
continue;
if (uint32 enchant_id = GetEnchantmentId(EnchantmentSlot(enchant_slot)))
if (SpellItemEnchantmentEntry const* enchantEntry = sSpellItemEnchantmentStore.LookupEntry(enchant_id))
if (enchantEntry->slot & ENCHANTMENT_CAN_SOULBOUND)
return true;
}
return false;
}
Взял из эмулятора World of WarCraft Trinity 4.3.4 ветка.
Все говно в 6 строчке
PERM_ENCHANTMENT_SLOT = 0
MAX_ENCHANTMENT_SLOT = 15
PRISMATIC_ENCHANTMENT_SLOT = 6
PROP_ENCHANTMENT_SLOT_0 = 10
Heisenberg,
03 Января 2013
-
+19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
template<typename T>
static json_string _itoa(T val) json_nothrow {
/*...*/
long value = (long)val;
/*...*/
}
Продолжаю бороться с поддержкой 64-битных чисел в libjson :/
myaut,
30 Декабря 2012
-
+23
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
#include <iostream>
using namespace std;
class Class {
public:
explicit Class(int a) : m_int(a) {}
int get() const { return m_int; }
void swapThis(int a) {
delete this;
Class **thisptr = reinterpret_cast<Class**>(&a);
thisptr--;
*thisptr = new Class(a);
cout << "this: " << this << endl
<< "that: " << *thisptr << endl;
}
private:
int m_int;
};
int main() {
Class *s = new Class(13);
s->swapThis(42);
cout << s->get() << endl;
delete s;
return 0;
}
Что творит хакингкостылинг + инлайн методы.
http://ideone.com/5Kyitw
Elvenfighter,
29 Декабря 2012
-
+24
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
#include <iostream>
#define n 1
int main()
{
using namespace std;
cout << (n < 0 ? 1 : 0)+
((n << 1) < 0 ? 1 : 0)+
((n << 2) < 0 ? 1 : 0)+
((n << 3) < 0 ? 1 : 0)+
((n << 4) < 0 ? 1 : 0)+
((n << 5) < 0 ? 1 : 0)+
((n << 6) < 0 ? 1 : 0)+
((n << 7) < 0 ? 1 : 0)+
((n << 8) < 0 ? 1 : 0)+
((n << 9) < 0 ? 1 : 0)+
((n << 10) < 0 ? 1 : 0)+
((n << 11) < 0 ? 1 : 0)+
((n << 12) < 0 ? 1 : 0)+
((n << 13) < 0 ? 1 : 0)+
((n << 14) < 0 ? 1 : 0)+
((n << 15) < 0 ? 1 : 0)+
((n << 16) < 0 ? 1 : 0)+
((n << 17) < 0 ? 1 : 0)+
((n << 18) < 0 ? 1 : 0)+
((n << 19) < 0 ? 1 : 0)+
((n << 20) < 0 ? 1 : 0)+
((n << 21) < 0 ? 1 : 0)+
((n << 22) < 0 ? 1 : 0)+
((n << 23) < 0 ? 1 : 0)+
((n << 24) < 0 ? 1 : 0)+
((n << 25) < 0 ? 1 : 0)+
((n << 26) < 0 ? 1 : 0)+
((n << 27) < 0 ? 1 : 0)+
((n << 28) < 0 ? 1 : 0)+
((n << 29) < 0 ? 1 : 0)+
((n << 30) < 0 ? 1 : 0)+
((n << 31) < 0 ? 1 : 0)
<< endl;
return 0;
}
Для заданного пятизначного целого числа подсчитать количество его нулей.
Прямо с экзамена. Преподаватель катается по полу. Не шучу.
LispGovno,
25 Декабря 2012
-
+24
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
#ifndef JSON_SPIRIT_READER_TEMPLATE
#define JSON_SPIRIT_READER_TEMPLATE
// Copyright ***
// Distributed under the MIT License, see accompanying file LICENSE.txt
// json spirit version 4.05
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
//some classes
#endif
Сначала проверим многократное включение через макросы, а потом # pragma once - чтобы наверняка!
Try,
24 Декабря 2012
-
+16
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
#include <iostream>
using namespace std;
struct T{int a;T(){cout<<"T"<<this<<endl;}~T(){cout<<"~T"<<this<<endl;}};
struct D:public T{int b;D(){cout<<"D"<<this<<endl;}~D(){cout<<"~D"<<this<<endl;}};
int main() {
T* a = new D[2];
cout<<"mission failure"<<endl;
delete[] a;
return 0;
}
Писал тест специально для Тараса:
Виртуальный деструктор в базовых классах нужен:
*Для вызова деструкторов всех потомков. Иногда это не нужно, тк поля структуры тривиальны. Согласен с Тарасом.
*Для правильного выбора перегруженного оператора delete. Создал одним менеджером памяти, а удалил в другой - это плохо. Но также бывает редко и только в специфичных проектах.
Но вот то, что демонстрируется в этом примере - думаю чего-нибудь такого создатели той библиотеки, что ковырял Тарас, и опасались.
Не просто было вызван деструктор только для предков, забыв о деструкторах потомков, но и:
*Деструктор предков был вызван для this не по тем адресам, где расположены объекты.
Не удивлюсь, если:
*В некоторых кулхацкерских реализациях менеджеров памяти будет удален буфер меньшего размера и куча попортится или оставшаяся не удаленная часть массива в куче просто утекет.
http://liveworkspace.org/code/2X3MR0$8
LispGovno,
22 Декабря 2012
-
+10
нахуя?
у всех наследников то же самое и наличие чего-либо внутри не предполагается
Первая ссылка по гуглозапросу "c++ mersenne twister" выдаёт склад оопиозного говнокода:
http://www.bedaux.net/mtrand/
TarasB,
19 Декабря 2012
-
+13
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
#include <iostream>
using namespace std;
class Manager
{
private:
int *ar;
int _size;
public:
void CreateArray(int size);
void ResizeArray(int size);
void MakeIntArray(int iter, int number);
int GetIntArray(int iter);
~Manager()
{
delete [] ar;
}
};
void Manager::CreateArray(int size)
{
_size = size;
ar = new int[size];
}
void Manager::ResizeArray(int size)
{
int *nar = new int[size];
for(int i = 0; i < _size; i++)
{
*(nar+i) = *(ar+i);
}
_size = size;
delete [] ar;
*ar = *nar;
}
int Manager::GetIntArray(int iter)
{
return iter < _size ? *(ar+iter) : NULL;
}
void Manager::MakeIntArray(int iter, int number)
{
if(iter < _size)
*(ar+iter) = number;
}
int main()
{
Manager Man;
Man.CreateArray(10);
for(int i = 0; i < 10; i++)
Man.MakeIntArray(i, i);
for(int i = 0; i < 10; i++)
cout << Man.GetIntArray(i) << " ";
Man.ResizeArray(20);
cout << endl;
for(int i = 10; i < 20; i++)
Man.MakeIntArray(i, i);
for(int i = 0; i < 20; i++)
cout << Man.GetIntArray(i) << " ";
return 0;
}
> Собственно написал менеджер для массива, хочется узнать правильно ли все сделано, и нет ли утечек памяти?
Очередной шедевр с самизнаетеоткуда.
LispGovno,
12 Декабря 2012
-
+79
- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
//Unit1.h
const float RADIAN=0.01744444444;
TForm1 *Form1;
Graphics::TBitmap*ZadniyBuffer;
float ShipPosX,ShipPosY;
float ShipAngle;
float ShipSpeed;
bool LEFT,RIGHT,UP;
TList*Bullets;
TList*Asteroids;
class Bullet
{
public:
float x,y,dx,dy;
void CreateBullet()
{
x=ShipPosX;y=ShipPosY;
dx=10*cos(RADIAN*ShipAngle);
dy=10*sin(RADIAN*ShipAngle);
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->Color=clRed;
ZadniyBuffer->Canvas->MoveTo(x,y);
ZadniyBuffer->Canvas->LineTo(x+dx,y+dy);
}
};
class CRock
{
public:
float x,y;
int Figure[50];
float Angle;
float Spin;
float XSpeed,YSpeed;
int Tip;
void CreateAsteroid(int t)
{
Tip=t;
XSpeed=random(4)+(random(9)/10.0)-2;
YSpeed=random(4)+(random(9)/10.0)-2;
Spin=random(10)-5;
for(int i=0;i<20;i++)
{
if(Tip==1)Figure[i]=random(10)+25;
if(Tip==2)Figure[i]=random(10)+10;
if(Tip==3)Figure[i]=random(5)+5;
}
}
void Move()
{
x+=XSpeed;y+=YSpeed;
Angle+=Spin;
if(x>440)x=-40;if(x<-40)x=440;
if(y>440)y=-40;if(y<-40)y=440;
}
void Draw()
{
ZadniyBuffer->Canvas->Pen->Color=clRed;
float tAng=0;
int tx=cos(RADIAN*(Angle+tAng))*Figure[0]+x;
int ty=sin(RADIAN*(Angle+tAng))*Figure[0]+y;
ZadniyBuffer->Canvas->MoveTo(tx,ty);
for(int i=0;i<20;i++,tAng+=19)
{
int tx=cos(RADIAN*(Angle+tAng))*Figure[i]+x;
int ty=sin(RADIAN*(Angle+tAng))*Figure[i]+y;
ZadniyBuffer->Canvas->LineTo(tx,ty);
}
}
};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
randomize();
ZadniyBuffer=new Graphics::TBitmap();
ZadniyBuffer->Width =400;
ZadniyBuffer->Height=400;
ZadniyBuffer->Canvas->Pen->Color=clWhite;
Bullets =new TList();
Asteroids=new TList();
LEFT=false;RIGHT=false;
ShipPosX=200;ShipPosY=200;
ShipAngle=0;
ShipSpeed=0;
for(int i=0;i<4;i++)
{
CRock*a=new CRock();
a->x=random(400);
a->y=40;
a->CreateAsteroid(1);
Asteroids->Add((void*)a);
}
}
//---------------------------------------------------------------------------
void TForm1::CLS()
{
ZadniyBuffer->Canvas->Brush->Color=clBlack;
ZadniyBuffer->Canvas->FillRect(Rect(0,0,400,400));
Привет. Вот, украл, вернее, скачал с розришения автора код для курсача. На учебу билдера тупо времени нет, ибо есть много хвостов. Можете ли вы мне обьяснить весь код? Буду благодарен.
kolybasov,
12 Декабря 2012
-
+15
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
LambdaVar<1> X;
LambdaVar<2> Y;
// The next line prints 10:
cout << lambda(X,Y)[ plus[ multiplies[3,X], Y ] ] (3,1) << endl;
cout << lambda(X,Y)[ (3 %multiplies% X) %plus% Y ] << endl;
//...
lambda(X)[ X %plus% getCurrentTime[_*_] ]
//...
let[ X == someLambdaExp,
Y == someOtherLambdaExpWhichMayInvolveX ]
.in[ someLambdaExpInvolvingXandY ]
//...
lambda(X)[
letrec[ F == lambda(Y)[ if1[ Y %equals% 0,
1,
Y %multiplies% F[Y %minus% 1] ] ] ]
.in[ F[X] ] ]
//...
Maybe<int> mx = just(2);
Maybe<int> my = just(3);
mx = lambda()[ compM<MaybeM>()[ plus[X,Y] | X<=mx, Y<=my, guard[false] ] ]();
cout << mx << endl; // Nothing
//...
compM<ListM>()[ makePair[X,Y] | X<=list_with(1,2), guard[true],
Y<=list_with(3,4), guard[ (Y %divides% X) %equal% 3 ] ] ]
Грибки отсюда:
http://people.cs.umass.edu/~yannis/fc++/
LispGovno,
10 Декабря 2012