| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
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})