olDjeka писал(а):
Не переусердствуй, а то "перегоришь"У нас была алгебра... вернее даже две подряд, я уже сделал два номера вперед и поэтому сидел размышлял над кодом, изредка возвращаясь в реал и смотря на доску Так что с приоритетами у меня порядок [/offtop]
------------ Дoбавленo в 15.16:
Мда, пока что результаты неутешительные, почти в 1.8 раз дольше чем аналог на If-ах:
Add(MainForm,6617236,140,119)
{
Width=316
Height=130
}
Add(IfParse,3383782,455,203)
{
Operands=#2:x1|2:x2|2:x3|
CompareStr="(x1 = 'Assasin' and x2 = 'Editor') xor x3 <> 'xor'"
Point(doCompareStr)
link(onTrue,14621491:doValue,[])
link(x1,13797966:Var2,[])
link(x2,13743413:Var2,[])
link(x3,5355037:Var1,[(475,170)])
}
Add(Button,200806,231,203)
{
Left=10
Top=30
Caption="Cmp"
link(onClick,512977:doEvent1,[])
}
Add(Edit,13947472,406,252)
{
Left=10
Top=5
Width=295
Text="(x1 = 'Assasin' and x2 = 'Editor') xor x3 <> 'xor'"
link(onChange,3383782:doCompareStr,[(446,258)(446,216)])
}
Add(Edit,12907944,420,105)
{
Left=75
Top=30
Width=230
Text="Assasin"
}
Add(Edit,15998327,462,105)
{
Left=75
Top=55
Width=230
Text="Editor"
}
Add(Edit,9343877,504,105)
{
Left=75
Top=80
Width=230
Text="xor"
}
Add(Memory,14621491,567,203)
{
}
Add(For,8000001,406,203)
{
Start=1
End=100000
link(onEvent,3383782:doCompare,[])
link(onStop,3875979:doStop,[(445,216)(445,197)(345,197)(345,216)])
}
Add(TimeCounter,3875979,357,203)
{
link(onStart,8000001:doFor,[])
link(onStop,1471027:doWork1,[(397,216)])
}
Add(Hub,512977,280,203)
{
link(onEvent1,3875979:doStart,[])
link(onEvent2,9755672:doStart,[(304,216)(304,370)])
}
Add(Message,1808652,406,308)
{
}
Add(For,4340021,406,364)
{
Start=1
End=100000
link(onEvent,11027046:doCompare,[])
link(onStop,9755672:doStop,[(450,377)(450,356)(345,356)(345,377)])
}
Add(If_else,11027046,455,364)
{
Op2=String(Assasin)
link(onTrue,6893893:doCompare,[])
link(onFalse,10612765:doWork2,[(498,377)(498,419)])
link(Op1,13797966:Var3,[(461,244)(521,244)(521,163)])
}
Add(GetDataEx,13797966,455,158)
{
Angle=3
link(Data,12907944:Text,[(426,163)])
}
Add(If_else,6893893,504,364)
{
Op2=String(Editor)
link(onTrue,2800841:doCompare,[])
link(onFalse,10612765:doWork1,[(548,377)(548,397)(522,397)])
link(Op1,13743413:Var3,[(510,180)])
}
Add(GetDataEx,13743413,462,175)
{
link(Data,15998327:Text,[])
}
Add(If_else,2800841,553,364)
{
Op2=String(xor)
link(onTrue,4065354:doWork2,[])
link(Op1,6052838:Var3,[(559,170)])
}
Add(GetDataEx,5355037,504,165)
{
link(Data,9343877:Text,[])
}
Add(If_else,13469190,539,413)
{
Type=5
Op2=String(xor)
link(onTrue,4065354:doWork3,[(599,419)])
link(Op1,6052838:Var2,[])
}
Add(GetDataEx,6052838,539,165)
{
Angle=3
link(Data,5355037:Var3,[])
}
Add(Memory,12368110,623,364)
{
}
Add(HubEx,4065354,595,364)
{
link(onEvent,12368110:doValue,[])
}
Add(TimeCounter,9755672,357,364)
{
link(onStart,4340021:doFor,[])
link(onStop,1471027:doWork3,[(397,377)])
}
Add(HubEx,1471027,393,308)
{
link(onEvent,1808652:doMessage,[])
}
Add(HubEx,10612765,518,413)
{
link(onEvent,13469190:doCompare,[])
}
------------ Дoбавленo в 15.58:
Используя новую структуру и несколько поправок удалось добиться снижения с 1.8-2.0 раза, до (среднее значение меж 3 тестов) 1.51835240469286. Все же уже лучше, но на большее у меня пока что нет идей.
Вот компонент, а тестовая схема осталась той же.
[burl=/getfile/20770]ifparse1.2.rar[/burl]