-
+156
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
char* setw_c(int width, char* str, const char align){
width = width - strlen(str) / 2;
if (align == 'l'){
std::cout << str;
if (width > 0)
for (int i = 0; i < width - 1; i++)
std::cout << " ";
return " ";
} else {
if (width > 0)
for (int i = 0; i < width; i++)
std::cout << " ";
return str;
}
}
вот так коряво я решил проблему с setw(), кириллицей и utf-8.
strlen() - чуть ли не единственная функция из cstring, более-менее нормально работающая с кириллицей в utf-8, да и то возвращает не реальную длину, а в два раза бОльшую, т.к. в utf-8 символ кириллицы занимает 2 байта, вместо одного, чего эта функция не учитывает.
bugaga_,
13 Ноября 2010
-
+163
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
std::vector<double> WBuffer;
std::vector<double> CleanWBuffer;
std::vector<Color> PixelBuffer;
std::vector<Color> CleanPixelBuffer;
void Scene3D::ClearBuffers()
{
const size_t n = static_cast<size_t>(ScreenSize[0] * ScreenSize[1]);
memcpy(&*(WBuffer.begin()), &*(CleanWBuffer.begin()), n * sizeof(*(WBuffer.begin())));
memcpy(&*(PixelBuffer.begin()), &*(CleanPixelBuffer.begin()), n * sizeof(*(PixelBuffer.begin())));
}
Быстрая очистка буферов.
CleanWBuffer предварительно заполнен 0.0, CleanPixelBuffer предварительно заполнен нужным цветом.
Можно было воспользоваться std::fill, но оно работает в несколько раз дольше.
Пришлось так вот лезть в потроха std::vector. Доставляют подряд идущие & и *.
burdakovd,
12 Ноября 2010
-
+157
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
void Scene3D::DrawTriangle(const Point3D &A, const Point3D &B, const Point3D &C, const Color& color)
{
// ---------------------------------------------------------------------------------------
// вспомогательные вычисления
// нормаль
const Vector3D& n = (B - A) ^ (C - A);
// ...
// центр треугольника
const Point3D& medium = (A + B + C) / 3.0;
Руки как-то привыкли const TypeName& variableName набирать в определении параметров методов.
И случайно набралось такое (строки 6, 11)
Операторы (+, -, ^, /) над векторами возвращают Vector3D, не const Vector3D&.
Заметил только через полгода, и всё это время оно почему-то работало, и даже ворнингов не было.
Но такое ведь не должно работать!
Результат вычисления в правой части присваивания структура, то есть она возвращается в стеке. Если бы я присвоил её какой-то локальной переменной, для которой выделена память в стеке текущей функции, то она бы перед удалением скопировалась в локальную переменную. А так получается что ссылка (n, medium) указывает куда-то на стек, где временно хранится возвращенное оператором значение. И при следующем вызове любой функции эта область стека должна перезаписаться.
burdakovd,
12 Ноября 2010
-
+144
- 1
- 2
- 3
- 4
if (!bNextPageVisited)
this->button(QWizard::NextButton)->setEnabled(false);
if (bNextPageVisited)
this->button(QWizard::NextButton)->setEnabled(true);
Упячка мозга?..
des-1008d,
12 Ноября 2010
-
+164
- 1
- 2
- 3
- 4
double *ptr = new (nothrow) double[n];
if (ptr) {
//....
} else throw bad_alloc();
Sanya_M,
11 Ноября 2010
-
+172
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
void Logger::LogString( std::string &s )
{
if (s.size() > 4096) {
// предотвращаем слишком длиные строки в логе.
s.resize( 4096 );
}
m_LogStream << LogMessagePrefix() << s << std::endl;
}
народ пару дней понадобилось найти почему XML сообщения, размером слегка больше обычного, Xerces не принимает. идеи иссякли - пока в лог не посмотрели и не нашли вот по такому (проиллюстрированому выше) чудо принципу работающий логгер.
Dummy00001,
10 Ноября 2010
-
+145
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
// The future of the C# or ...
// Why waste time on trifles, teaching programmers the subtleties of programming !? :)
//...
CComboBox cb = new Windows7(Windows7Type::wt_combobox);
for( int i = 0; i < strArray.length(); i++ ) {
CComboBoxItem item = new Windows7(Windows7Type::wt_combobox_item, strArr[i]);
cb.Add(item);
}
nnemo,
09 Ноября 2010
-
+170
- 1
- 2
- 3
...
w << (byte)(char)0x00;
...
вывод в файл нулевого байта, иначе не работало
onto,
09 Ноября 2010
-
+163
- 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
//table[0][i] - win1251
table[0][0]=0xA8;
for (q=192;q<=255;q++) {
table[0][q-191]=(byte)q;
}
table[0][65]=0xB8;
//table[1][i] - KOI8
table[1][0]=0xB3; table[2][1]=0xE1; table[1][2]=0xE2; table[1][3]=0xF7; table[1][4]=0xE7; table[1][5]=0xE4;
table[1][6]=0xE5; table[1][7]=0xF6; table[1][8]=0xFA; table[1][9]=0xE9; table[1][10]=0xEA; table[1][11]=0xEB;
table[1][12]=0xEC; table[1][13]=0xED; table[1][14]=0xEE; table[1][15]=0xEF; table[1][16]=0xF0; table[1][17]=0xF2;
table[1][18]=0xF3; table[1][19]=0xF4; table[1][20]=0xF5; table[1][21]=0xE6; table[1][22]=0xE8; table[1][23]=0xE3;
table[1][24]=0xFE; table[1][25]=0xFB; table[1][26]=0xFD; table[1][27]=0xFF; table[1][28]=0xF9; table[1][29]=0xF8;
table[1][30]=0xFC; table[1][31]=0xE0; table[1][32]=0xF1; table[1][33]=0xC1; table[1][34]=0xC2; table[1][35]=0xD7;
table[1][36]=0xC7; table[1][37]=0xC4; table[1][38]=0xC5; table[1][39]=0xD6; table[1][40]=0xDA; table[1][41]=0xC9;
table[1][42]=0xCA; table[1][43]=0xCB; table[1][44]=0xCC; table[1][45]=0xCD; table[1][46]=0xCE; table[1][47]=0xCF;
table[1][48]=0xD0; table[1][49]=0xD2; table[1][50]=0xD3; table[1][51]=0xD4; table[1][52]=0xD5; table[1][53]=0xC6;
table[1][54]=0xC8; table[1][55]=0xC3; table[1][56]=0xDE; table[1][57]=0xDB; table[1][58]=0xDD; table[1][59]=0xDF;
table[1][60]=0xD9; table[1][61]=0xD8; table[1][62]=0xDC; table[1][63]=0xC0; table[1][64]=0xD1; table[1][65]=0xA3;
// table[2][i] - CP866
table[2][0]=0xf0;
for (q=128;q<=175;q++) {
table[2][q-127]=(byte)q;
}
for (q=224;q<=239;q++) {
table[2][q+49-224]=(byte)q;
}
table[2][65]=0xf1;
// table[3][i] - Unicode
table[3][0]=0x01;
for (q=16;q<=79;q++) {
table[3][q-15]=(byte)q;
}
table[3][65]=0x51;
Таблица кодировок.
onto,
09 Ноября 2010
-
+157
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
void QeLabel::mouseReleaseEvent(QMouseEvent *ev) {
switch (ev->button()) {
case Qt::LeftButton : {
click++;
click %=2;
if (click == 0) {
emit dbl_clicked(id);
}
emit clicked(id);
break;
}
default: break;
}
}
сигналы на нажатие мыши
onto,
09 Ноября 2010