parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

в общем виде это сделать невозможно

Misha v.3 03.12.2006 12:51 / 03.12.2006 12:54

т.к. основная фишка, ради которой и используют биты, состоит в том, что несколько битов может быть установлено одновременно, т.е. в случае switch нам нужно будет идти как бы по нескольким веткам одновременно. однако switch этого не умеет, т.к. он позволяет делать выбор лишь одного варианта из нескольких.

однако если в вашем случае вы знаете, что одновременно не может быть установлено несколько бит одновременно и switch вам подходит, вы можете сделать так:
@right_name[iType]
^if(^tAccessTypes.locate($tAccessTypes.type & $iType)){
	$result[$tAccessTypes.title]
}{
	$result[]
}
и использовать switch:
^switch[^right_name(^hItem.type_is.int(0))]{
	^case[basket]{
		код
	}
	^case[ordered]{
		код
	}
	^case[confirmed]{
		код
	}
}
кроме того я немного иначе написал бы метод right_is (не знаю, эффективнее он стал бы или нет, проверьте сами):
@right_is[sTitle;iType]
$result(^tAccessTypes.locate($tAccessTypes.title eq $sTitle && $tAccessTypes.type & $iType))
# end of @right_is[]
P.S. перечислять в списке локальных переменных входные переменные нет необходимости, они и так локальные.