-
+135
- 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
- 88
Структура для хранения данных:
typedef struct rs_script_t {
int status; // on/off
int next_stage;
int next_time;
} rs_script_t;
Макросы:
#define SEQ(scr1,t) \
const int scr_zero = __COUNTER__; \
rs_script_t *scr = scr1; \
if ( (scr->status) && (t > scr->next_time) ) { \
switch(scr->next_stage) { \
#define END_SEQ } };
#define SEQ_FIRST \
case 0: \
scr->next_stage = scr_zero;
#define SEQ_DT(dt) \
scr->next_stage = __COUNTER__ + 1; \
scr->next_time += dt; \
break; \
case __COUNTER__: \
#define SEQ_DT_TAGGED(dt,tag) \
scr->next_stage = __COUNTER__ + 1; \
scr->next_time += dt; \
break; \
case __COUNTER__: \
case (100000+tag): \
#define SEQ_LAST_DEFAULT \
scr->status = 0; \
break; \
\
default: \
DEBUG10f(":: ERROR, unknown stage position: %d \n", scr->next_stage); \
break;
#define SEQ_GOTO(dt,tag) \
scr->next_stage = 100000+tag; \
scr->next_time += dt; \
break;
#define SEQ_GOTO_INSTANT(tag) \
scr->next_stage = 100000+tag; \
break;
Пользоваться примерно так:
void process() { // вызывать каждый кадр
SEQ(&scrtest, rs_app.app_time)
SEQ_FIRST
printf("Ноль\n");
SEQ_DT(1000)
printf("Один\n");
SEQ_DT(1000)
printf("Два\n");
SEQ_DT_TAGGED(1000, 555)
printf("Три (метка №555) \n");
SEQ_DT(1000)
printf("Четыре\n");
SEQ_DT(1000)
printf("Пять\n");
SEQ_DT(1000)
printf("Шесть, повторяем с метки №555, если нажат Шифт\n");
if (rs_keyboard_is_key_down(RS_KEY_SHIFT_L)) {
SEQ_GOTO(1000, 555);
};
printf("Завершаем. \n");
SEQ_LAST_DEFAULT
END_SEQ;
};
Страдания по yield
TarasB,
23 Декабря 2013
-
+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
- 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
- 88
- 89
- 90
- 91
- 92
#include <iostream>
#include <conio.h>
#include <clocale>
using namespace std;
int files; int disc_D(); int disc_E(); int disc_C();
int resursefunction()
{char s;
cout << "Выберите диск" << endl;
cout <<"1-D:\\" << endl;
cout <<"2-C:\\" << endl;
cout <<"3-E:\\" << endl;
cout <<"0 - рабочий стол" << endl;
cin >> s;
if(s == '1') return disc_D();
if(s == '2') return disc_C();
if(s == '3') return disc_E();
if(s == '0') return main();
_getch();}
int main()
{ char vibor;
setlocale( LC_ALL, "Russian" );
cout << "\t\t\t\tРабочий стол" << endl;
cout << "\n\n";
cout << "1-Управление ресурсами" << endl;
cout << "2-Программы" << endl;
cout << "3-Игры" << endl;
cout << "4-Выход из системы" << endl;
cin >> vibor;
if(vibor == '1') resursefunction();
_getch();
return main();}
int disc_D()
{ int res, a;
char vv;
cout << "D:\\" << endl;
cout << "На диске" << endl;
cout << "5 - папок" << endl;
cout << files << " - файлов" << endl;
cout << "1 - создать файл" << endl;
cout << "2 - удалить файл" << endl;
cout << "0 - назад" << endl;
cin >> vv;
if(vv == '1')
{cout << "Введите сколько создать файлов"; cin >> a; res = files + a;
res = files + a;}
if(vv == '2')
{cout << "Введите сколько удалить файлов"; cin >> a; res = files - a;
res = files - a;}
if(vv == '0') return resursefunction();
files = res;
return disc_D();}
int disc_E()
{
int res, a;
char vv;
cout << "E:\\" << endl;
cout << "На диске" << endl;
cout << "7 - папок" << endl;
cout << files << " - файлов" << endl;
cout << "1 - создать файл" << endl;
cout << "2 - удалить файл" << endl;
cout << "0 - назад" << endl;
cin >> vv;
if(vv = '1')
{cout << "Введите сколько создать файлов"; cin >> a; res = files + a;
res = files + a;}
if(vv == '2')
{cout << "Введите сколько удалить файлов"; cin >> a; res = files - a;
res = files - a;}
if(vv == '0') return resursefunction();
files = res;
return disc_E();}
int disc_C()
{int res, a;
char vv;
cout << "C:\\" << endl;
cout << "На диске" << endl;
cout << "5 - папок" << endl;
cout << files << " - файлов" << endl;
cout << "1 - создать файл" << endl;
cout << "2 - удалить файл" << endl;
cout << "0 - назад" << endl;
cin >> vv;
if(vv = '1')
{cout << "Введите сколько создать файлов"; cin >> a; res = files + a;
res = files + a;}
if(vv == '2')
{ cout << "Введите сколько удалить файлов"; cin >> a; res = files - a;
res = files - a; }
if(vv == '0') return resursefunction();
files = res;
return disc_C();}
Еще нашел на форумах. К сожалению форматирование пришлось убить, иначе оно не помещалось целиком
pelmenka,
23 Декабря 2013
-
+13
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
if (axis[0] == vector[0] && axis[1] == vector[1] && axis[2] == vector[2])
{
this->anglex = 0.0f;
}
else if (vector[1] >= 0.0f)
{
this->anglex = 360.0f*(GLfloat)acos(VectorMathf::dotProductf(axis, vector))/(2.0f*PIf);
}
else
{
this->anglex = -360.0f*(GLfloat)acos(VectorMathf::dotProductf(axis, vector))/(2.0f*PIf);
}
Часть либы ES3D (http://sourceforge.net/projects/es3d/).
Кто не понял в чем прикол - все переменные имеют тип float.
Pythoner,
23 Декабря 2013
-
+126
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
public Random abstract_logic = new Random();
...
private int ComplexFunctionToDetermineTheNumberOfResults(ObservableCollection<Result> rs)
{
int a = 0;
for (int i = 0; i < rs.Count; i++)
{
a += rs[i].Value;
}
double d = a / Math.PI;
d = Math.Cos(d) * Math.Sin(a) * (Math.Cos(Math.PI) + 1);
return abstract_logic.Next((int)d + 3) + 3;
}
Лаба 2.
Наформашлепствовал 40+ файлов (Сплошной говнокод), в итоге должна получится система тестирования. В конце данной функцией определяю количество выводимых результатов.
maksim_ovcharik,
22 Декабря 2013
-
+155
- 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
$s='';
$kfg=new Konfig('');
$kfg('self');
{
$kfg->k1='v1';
$s.=$kfg->k1."\n";
}
{
$kfg->k2->k='v2';
$s.=$kfg->k2->k."\n";
}
{
$kfg->{'k3.k'}='v3';
$s.=$kfg->k3->k."\n";
}
{
$kfg->k4='v4';
$kfg->k4->k='v4';
$s.=$kfg->k4."\n";
$s.=$kfg->k4->k."\n";
}
{
$s.=$kfg->strstr('ab','b');
}
$this->response->body('<pre>'.$s."\n".Debug::dump((string)$kfg)."\n".Debug::dump($kfg).'</pre>');
TDD in Action, Вот так я проверяю работоспособность волшебной во всех местах конфиги.
из личного сайта http://lure0xaos.url.ph/
Lure Of Chaos,
22 Декабря 2013
-
+70
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
package gargoyle.heartsong.pages.test;
import gargoyle.heartsong.annotations.model.InjectDAO;
import gargoyle.heartsong.model.UserEntity;
import gargoyle.heartsong.services.model.i.DAO;
import java.util.List;
public class TestDAO2 {
@InjectDAO(key = Integer.class, value = UserEntity.class)
private DAO<Integer, UserEntity> users;
public List<UserEntity> getUsers() {
return this.users.all();
}
}
дай Люру в руки Tapestry, так он станет программировать на аннотациях.
это вам уже не программирование "на стрелочках", болезнь прогрессирует.
да, аннотация @CommitAfter оборачивает тело метода в транзакцию с коммитом и роллбэком при исключении;
есть аннотация @Notify, которая показывает уведомление, если была ошибка, и меняет возвращаемое значение;
по аннотациям @AdminPage строится меню админки;
и наконец, @RolesRequired ограничивает доступ к странице.
в итоге в классах одни собачки торчат вместо фунциональности. вот, убедитесь сами:
https://github.com/lure0xaos/HeartSong.git
Lure Of Chaos,
22 Декабря 2013
-
+132
- 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
procedure tmythread.execute;
var i:integer;
begin
bot.postnumber:=topicno; bot.proxy:='220.181.89.72:8000'; bot.login:=copy(vote,1,pos(':',vote)-1); bot.password:=copy(vote,pos(':',vote)+1,length(vote));
case actiontype of
ac_dec:
begin
bot.comment:=false;
try
bot.connect;
except
terminate;
end;
bot.VoteAgainst;
end;
ac_inc:
begin
bot.comment:=false;
try
bot.connect;
except
terminate;
end;
bot.VoteOn;
end;
ac_deccurrent:
begin
bot.comment:=true;
try
bot.connect;
except
terminate;
end;
bot.VoteAgainst;
end;
ac_inccurrent:
begin
bot.comment:=true;
try
bot.connect;
except
terminate;
end;
bot.VoteOn;
end;
ac_decall:
begin
bot.comment:=true;
try
bot.connect;
except
terminate;
end;
for i:=0 to clist.Count-1 do
begin
bot.postnumber:=clist[i];
bot.VoteAgainst;
end;
end;
ac_incall:
begin
bot.comment:=true;
try
bot.connect;
except
terminate;
end;
for i:=0 to clist.Count-1 do
begin
bot.postnumber:=clist[i];
bot.VoteOn;
end;
end;
ac_decallc:
begin
bot.comment:=true;
try
bot.connect;
except
terminate;
end;
for i:=0 to clist.Count-1 do
begin
bot.postnumber:=clist[i];
bot.VoteAgainst;
end;
end;
ac_incallc:
begin
bot.comment:=true;
try
bot.connect;
except
terminate;
end;
for i:=0 to clist.Count-1 do
begin
bot.postnumber:=clist[i];
bot.VoteOn;
end; end; end; end;
Код Того-На-Кого-Не-Будем-Показывать-Пальцем
ВНИМАНИЕ! Некоторые строки были объединены дабы вместиться в пост
kegdan,
22 Декабря 2013
-
+143
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
string=(char*)malloc(N);
k=fread(string,sizeof(char),N,f);
while (k==N)
{
free(string);
N=N*2;
rewind(f);//возращает в начало файла
string =(char*)malloc(N);
k=fread(string,sizeof(char),N,f);
}
fclose (f);
Сегодня зачоты ставил...
студенты читают из файла. В буфер. Я придираюсь к тому, что размер файла может быть больше размера буфера....
Исправили...
klavdiev,
22 Декабря 2013
-
+128
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
//...
for (int i = 0; i < size; i++)
{
//...
if (i == size + 2) break;
//...
}
//...
Увидел у соседа в коде. Осторожность никогда не помешает :)
MoN,
21 Декабря 2013
-
+83
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
// java.io.FilterOutputStream
public void close() throws IOException {
try {
flush();
} catch (IOException ignored) {
}
out.close();
}
// тестовый код
try (OutputStream os = new BufferedOutputStream(new FileOutputStream("/tmp/little_virtual_fs/1.txt"))) {
byte[] buf = new byte[2028544];
os.write(buf, 0, 2028544); // максимальный размер файла, который влезает на нашу фс
os.write(buf, 0, 5); // и еще немножко
//os.flush();
}
А сейчас, на арене нашего цирка - очередная жабопроблема!
Как думаете, каков результат выполнения тестовой программы?
Запишет 2028549 байт? Хрен там, места маловато.
Выдаст IOException на write()? Хрен там, буферизация.
Выдаст IOException на close()? Хрен там, его сожрала реализация FilterOutputStream.
Результат: файл не дописался, исключения нет.
Решение: всегда дергать flush() перед close() самому или не юзать буферизованный поток.
bormand,
21 Декабря 2013