О, всемогущий свич! Нет, не всё. Он может только проверить _целочисленное_ выражение на соответствие одному из _конечного_ набора _фиксированных_ значений; т.е. по сути даже меньше, чем башевский.
О, всемогущий свич! Нет, не всё. Он может только проверить _целочисленное_ выражение на соответствие одному из _конечного_ набора _фиксированных_ значений; т.е. по сути даже меньше, чем башевский.
Зато на нем можно устроить знаменитый Duffs Device
В каждом из нас спит гений... и с каждым днем все крепче...
send(short *to, short *from, int count)
{
int n=(count+7)/8;
switch(count%8){
case 0: do{ *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
}while(--n>0);
}
}
В каждом из нас спит гений... и с каждым днем все крепче...
ну это такой способ loop unwinding.
сокращает накладные расходы на каждое пересылаемое слово.
свитч нужен для копирования куска данных, если размер не кратен 8 словам.
т.е. если count == 85, count%8 == 5
из switch попадаем на case 5 и копируется 5 слов. а потом switch игнорируется и идет простой цикл по 8 копирований. вобщем - все просто.
но я бы никогда не додумался до такого изврата....... я вообще, пока не проверил, сомневался, что эта конструкция синтаксически валидна....
ну это такой способ loop unwinding.
сокращает накладные расходы на каждое пересылаемое слово.
свитч нужен для копирования куска данных, если размер не кратен 8 словам.
т.е. если count == 85, count%8 == 5
из switch попадаем на case 5 и копируется 5 слов. а потом switch игнорируется и идет простой цикл по 8 копирований. вобщем - все просто.
но я бы никогда не додумался до такого изврата....... я вообще, пока не проверил, сомневался, что эта конструкция синтаксически валидна....
Век живи...
В каждом из нас спит гений... и с каждым днем все крепче...
elide@rebirth| ~ >> test(){
> echo -n "$1 = "
> case "$1" in
> [a-z]) echo английские маленькие;;
> [A-Z]) echo английские большие;;
> [ю-ъ]) echo русские маленькие;;
> [Ю-Ъ]) echo русские большие;;
> esac
> echo
> }
elide@rebirth| ~ >> test a
a = английские маленькие
elide@rebirth| ~ >> test d
d = английские маленькие
elide@rebirth| ~ >> test z
z = английские маленькие
elide@rebirth| ~ >> test S
S = английские большие
elide@rebirth| ~ >> test G
G = английские большие
elide@rebirth| ~ >> test J
J = английские большие
elide@rebirth| ~ >> test Ф
Ф = русские большие
elide@rebirth| ~ >> test Я
Я = русские большие
elide@rebirth| ~ >> test ц
ц = русские маленькие
elide@rebirth| ~ >> test л
л = русские маленькие