-
+260.9
- 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
7855BD60 55 push ebp
7855BD61 8B EC mov ebp,esp
7855BD63 56 push esi
7855BD64 33 C0 xor eax,eax
7855BD66 50 push eax
7855BD67 50 push eax
7855BD68 50 push eax
7855BD69 50 push eax
7855BD6A 50 push eax
7855BD6B 50 push eax
7855BD6C 50 push eax
7855BD6D 50 push eax
7855BD6E 8B 55 0C mov edx,dword ptr [ebp+0Ch]
7855BD71 8D 49 00 lea ecx,[ecx]
7855BD74 8A 02 mov al,byte ptr [edx]
7855BD76 0A C0 or al,al
7855BD78 74 09 je 7855BD83
7855BD7A 83 C2 01 add edx,1
7855BD7D 0F AB 04 24 bts dword ptr [esp],eax
7855BD81 EB F1 jmp 7855BD74
7855BD83 8B 75 08 mov esi,dword ptr [ebp+8]
7855BD86 8B FF mov edi,edi
7855BD88 8A 06 mov al,byte ptr [esi]
7855BD8A 0A C0 or al,al
7855BD8C 74 0C je 7855BD9A
7855BD8E 83 C6 01 add esi,1
7855BD91 0F A3 04 24 bt dword ptr [esp],eax
7855BD95 73 F1 jae 7855BD88
7855BD97 8D 46 FF lea eax,[esi-1]
7855BD9A 83 C4 20 add esp,20h
7855BD9D 5E pop esi
7855BD9E C9 leave
7855BD9F C3 ret
чудеса оптимизации
GovnocoderJr,
14 Февраля 2010
-
+160.6
- 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
// всё ещё Wakaba Extension http://userscripts.org/scripts/review/23705
function optionValue(optionName)
{
var optionsString = (doOptionsPanel) ? get_cookie('wkExtOptions') : '';
if (optionsString == '')
{
switch (optionName)
{
case 'doQuickReply':
return doQuickReply;
break;
case 'doThreadExpansion':
return doThreadExpansion;
break;
case 'doPostExpansion':
return doPostExpansion;
break;
/*... еще 12 условий ... */
default:
return 0;
}
}
else
{
var optionsArray = optionsString.split(/,/);
switch (optionName)
{
case 'doQuickReply':
return parseInt(optionsArray[0]); // parseInt ensures that 0 is handled as an integer. lol, weak types
break;
case 'doThreadExpansion':
return parseInt(optionsArray[1]);
break;
case 'doPostExpansion':
return parseInt(optionsArray[2]);
break;
/*... еще 12 условий ... */
default:
return 0;
}
}
}
Естественно, я бы сделал это хэшами.
Но кому-то код, что выше понятнее...
function optionValue(optionName)
{
var optionsString = (doOptionsPanel) ? get_cookie('wkExtOptions') : '';
if(!optionsString){
return options[optionName]; // не установлена опция - возвращается undefined
}else{
return defaultOptions[optionName];
}
}
m1el,
14 Февраля 2010
-
+170.3
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
// http://userscripts.org/scripts/review/23705
var replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton = document.createElement("input");
replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton.setAttribute("type", "submit");
replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton.setAttribute("value", "Submit");
replyBoxContentPostAreaTableSubjectRowRightColumn.appendChild(replyBoxContentPostAreaTableSubjectRowRightColumnSubmitButton);
replyBoxContentPostAreaTableSubjectRow.appendChild(replyBoxContentPostAreaTableSubjectRowLeftColumn);
replyBoxContentPostAreaTableSubjectRow.appendChild(replyBoxContentPostAreaTableSubjectRowRightColumn);
replyBoxContentPostAreaTBody.appendChild(replyBoxContentPostAreaTableSubjectRow);
Грустно. Очень грустно.
m1el,
14 Февраля 2010
-
+112.1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
public IEnumerator GetEnumerator()
{
for (int CurID = 0; CurID < (controls.Count + animations.Count) / 2; CurID++)
{
KeyValuePair<Control, Animation> kvp = new KeyValuePair<Control, Animation>(controls[CurID], animations[CurID]);
yield return kvp;
}
}
Писал я код, и задумался. А когда очнулся - уже было это.
ЗЫ. controls.Count == animations.Count
psina-from-ua,
14 Февраля 2010
-
+66.9
- 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
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
// Компилировать: g++ -o test reghead.cpp object1.cpp regtail.cpp main.cpp
//================== object.h: ==================
struct Object {
const char *name;
unsigned char props[0];
};
extern Object *head, *tail;
enum {PROPTYPE_BYTE = 0x40, PROPTYPE_WORD = 0x80};
enum {PROP_DESC = 1, PROP_LASTSTRING, PROP_COLOR, PROP_MASS, PROP_END = 0};
#define DECLARE_OBJECT(name) \
extern Object Object_##name, *name##_reg; \
Object *name##_reg __attribute__((section("oreg"))) = &Object_##name;\
Object Object_##name = {#name}; \
namespace name##_props {
#define PROP_BYTE(id, value) unsigned char id##_1 = id | PROPTYPE_BYTE, id##_2 = value;
#define PROP_WORD(id, value) unsigned char id##_1 = id | PROPTYPE_WORD, id##_2[2] = {value & 0xff, value >> 8};
#define PROP_STRING(id, value) unsigned char id##_1 = id; unsigned char id##_2[] = value;
#define END_PROPS unsigned char final = PROP_END; }
//================== reghead.cpp: ==================
#include "object.h"
Object *head __attribute__((section("oreg"))) = 0;
//================== regtail.cpp: ==================
#include "object.h"
Object *tail __attribute__((section("oreg"))) = 0;
//================== object1.cpp: ==================
#include "object.h"
DECLARE_OBJECT(object1)
PROP_BYTE(PROP_COLOR, 14)
PROP_WORD(PROP_MASS, 300)
PROP_STRING(PROP_DESC, "description")
END_PROPS
//================== main.cpp: ==================
#include <stdio.h>
#include <string.h>
#include "object.h"
int main()
{
Object **obj = &head;
while (++obj <= &tail) {
if (*obj == NULL)
continue;
printf("Object: %s\n", (*obj)->name);
unsigned char *props = (*obj)->props;
int id;
while ((id = *props) != PROP_END) {
if (id < PROP_LASTSTRING) {
char *value = (char *)props+1;
props = (unsigned char *)value + strlen(value) + 1;
switch (id) {
case PROP_DESC:
printf(" Description: %s\n", value);
break;
}
} else {
int value;
switch (id >> 6) {
case 1:
value = *((unsigned char *)(props+1));
props += 2;
break;
case 2:
value = *((unsigned short *)(props+1));
props += 3;
break;
}
switch (id & 63) {
case PROP_COLOR:
printf(" Color: %d\n", value);
break;
case PROP_MASS:
printf(" Mass:%d\n", value);
break;
}
}
}
}
}
Прошу прощения за длинный пример, но не мог не поделиться. Написано по мотивом кода из того же ZDaemon – примерно так там задаются и обрабатываются свойства объектов. Работает только с компилятором GCC. Если вы поняли, как это работает, а также почему подобный говнокод работает с gcc версии 3.2 и может зависать с более поздними версиями – можете по праву гордиться собой.
Arseniy,
13 Февраля 2010
-
+135.2
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
inline void clearbufshort (void *buff, unsigned int count, WORD clear)
{
if (!count)
return;
SWORD *b2 = (SWORD *)buff;
if ((int)b2 & 2)
{
*b2++ = clear;
if (--count == 0)
return;
}
do
{
*b2++ = clear;
} while (--count);
}
Наткнулся на такой вот шедевр в коде ZDaemon. Это аналог memset, только заполняет не байтами, а словами.
Кстати, там же рядом есть функция, запполняющая двойными словами:
inline void clearbuf (void *buff, int count, SDWORD clear)
{
SDWORD *b2 = (SDWORD *)buff;
while (count--)
*b2++ = clear;
}
Arseniy,
13 Февраля 2010
-
+137.6
- 1
w = (GtkWidget*)(*((int*)(lw->data)));
Объект для медитаций
mutanabbi,
13 Февраля 2010
-
+68.1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
void TInputTID::AvWnd(GtkWidget* w, char* name, int bOut, void (*cb) (int wnd, int data))
{
// Тут объявления локальных переменных и не относящиеся к делу манипуляции
if(((int)cb) != -1) // Шедевр
{
gtk_signal_connect ((GtkObject*)hButOK,
"clicked",GTK_SIGNAL_FUNC(cb),hOutWndBox);
}
}
Вечное сияние чистого разума. Новое слово в арифметике указателей.
mutanabbi,
13 Февраля 2010
-
−112.9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
NSString *s_diskUsage = [NSString localizedStringWithFormat:@"Unavailable"];;
float f_vaultUsage = 0;
if (inData == NULL || inData.loggedIn != 0)
{
[s_diskUsage release];
s_diskUsage = [NSString localizedStringWithFormat:@"Unavailable"];
f_vaultUsage = (float)0;
}
Продолжение эпопеи с проектом на Objective-C. Я не знаю, может это стандарт кодирования такой, когда нужно как можно чаще переинициализировать переменные одними и теми же значениями... на случай если им надоест и они самоуничтожатся...
Highlander,
13 Февраля 2010
-
−357.8
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
-(bool)hasInternetConnection
{
return true;
}
-(void)checkInternetConnection
{
NSLog(@"checking connection");
mTmp.loggedIn = ([self hasInternetConnection]==YES) ? 0 : -1;
}
Мой начальник-тимлид, американский индус по происхождению, узнав, что я уже несколько часов потратил на попытки неизвращенной реализации нужного нам "простого" функционала, сказал, что поможет мне, хоть я и не просил.
Уже через несколько минут я увидел у себя вот эти строки...
P.S. если кто не знает, то код на Objective-C
Highlander,
13 Февраля 2010