parser

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

 

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

а мне эти оптимизации кажутся идеологически неправильными

Misha v.3 03.02.2006 20:55

т.к. вывести всё дерево требуется один раз, а вот получать uri объекта по id - тучу раз (ну... по крайней мере у меня). может быть именно поэтому у egr-а данные помещаются в хеш.

правда я оригинальный get_uri переписал бы, чтобы там была рекурсия. примерно так:
@get_uri[id]
^if($id && $items_hash.$id){
	^rem{ *** если id != 0 и о таком id есть запись в хеше *** }
	^if(def $items_hash.[$id].uri){
		^rem{ *** если uri уже вычислен - возвращаем его *** }
		$result[$items_hash.[$id].uri]
	}{
		^rem{ *** не вычислен - вычисляем *** }
		$result[^if($items_hash.[$id].parent_id){^get_uri[$items_hash.[$id].parent_id]}/$items_hash.[$id].path]

		^rem{ *** записываем вычисленное чтобы больше не заниматься этими глупостями *** }
		$items_hash.[$id].uri[$result]
	}
}{
	^throw[uri.missing;$id;Id '$id' not found]
}
#end @get_uri[]
P.S. код не проверял