Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > e4xu

Всякие разные штуки сомнительной полезности сделанные в свободное от работы время.
Оценить эту запись

Коллекции: Ordered Map.

Запись от wvxvw размещена 14.03.2010 в 22:12

Вот понадобилась такая штука - из ближайших аналогов, ну, наверное TreeMap в Java но не совсем. Отличия в том, что допускаются повторные ключи и нет ни дефолтной (ни вообще никакой) функции сравнения. Основана на принципе двунаправленого незамкнутого линейного списка, но кроме ссылки на следующий и предыдущий элементы есть еще и ссылка на родителя / первый элемент. Ключи обязаны быть строками (но технически, можно и параметризовать. Но мне для моей задачи мужны были только строки. К Map прилагаются три итератора, один проходит по списку детей первого уровня, не фильтруя, другой делает то же самое, но с фильтрацией, третий обходит все элементы с фильтрацией.
Исходники: http://code.google.com/p/e4xu/source...ws/collections
Тест:
Код AS3:
/**
 * ...
 * @author wvxvw
 */
package tests;
 
import org.flashdevelop.utils.FlashConnect;
import org.wvxvws.collections.Map;
import org.wvxvws.collections.Node;
 
class TestMap 
{
 
	public function new() 
	{
 
	}
 
	public static function main():Void
	{
		haxe.Log.trace = function(s:String, ?pi:haxe.PosInfos)
		{
			FlashConnect.trace(s);
		};
 
		var m:Map<Float> = new Map<Float>(false);
		m.add("foo", 150.0);
		m.add("bar", 100.0);
		m.add("bar", 200.0);
		m.add("foobar", 250.0);
		m.map("bar", "foo");
		var l:List<Float> = new List<Float>();
		m.get("bar", l);
		trace("List " + l);
		trace(m);
		for (i in m) trace(i);
		trace("-- filtered --");
		for (i in m.filter(filter)) trace(i);
		trace("-- all --");
		for (i in m.all(filterAll)) trace(i);
	}
 
	private static function filter(name:String, value:Float):Bool
	{
		return name == "bar";
	}
 
	private static function filterAll(name:String, value:Float):Bool
	{
		return true;
	}
}
Зачем это может понадобится: если вам нужно проанализировать структуту такую, как текстовый документ со сложной разметкой (любой язык разметки подойдет, например CSS) и потом, на базе етой структуры манипулировать другими частями програмы. Конечная цель проекта - анализатор и компилятор CSS для HaXe. Продолжение следует
Размещено в HaXe
Комментарии 0 Отправить другу ссылку на эту запись
Всего комментариев 0

Комментарии

 

 


Часовой пояс GMT +4, время: 23:32.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.