parser

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

 

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

Тип данных очередь

serglif 03.03.2005 13:59 / 03.03.2005 14:02

Вот понадобилось и набацал побыстрому. Может кому пригодится. Критика кода очень приветствуется.
#==========================================================================================
# Класс для работы типом данных "Очередь". (v1.0) Автор: С. Лифшиц (serlif@mail.ru)
#==========================================================================================
#
# @create[data] - конструктор
# @push[data] - добавить в очередь
# @pop[] - взять из очереди
# @empty[] - проверка на пустоту
#
#==========================================================================================
	
@CLASS
dec

@create[data][key]
^if(def $data){
	$key[^math:uid64[]]
	$dec[
		$.quantity(1)
		$.keys[$key]
		$.$key[$data]}
	]
}{
	$.dec[$.quantity(0)]
}

@push[data][key;flag]
^if(def $data){
	^while(!$flag){
		$key[^math:uid64[]]
		^if(!def $dec.$key){$flag(1)}
	}
	$dec.keys[${dec.keys}$key]
	$dec.quantity($dec.quantity+1)
	$dec[$.[$key][$data]]
}

@pop[][key]
^if($dec.quantity>0){
	$key[^dec.keys.left(16)]
	$result[$dec.$key]
	$dec.quantity($dec.quantity-1)
	$dec.keys[^dec.keys.right(16*$dec.quantity)]
}

@empty[]
$result(^if($dec.quantity==0){1}{0})