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

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 08.03.2010, 19:22
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 14  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Кстати, врезультате тестов появилось следующее:
Код AS1/AS2:
/**
 * ...
 * @author wvxvw
 */
class org.wvxvw.Type
{
	private var _name:String;
	private var _value:Function;
	private static var _tpyeHash:Object = { };
 
	private function Type(value:Function) 
	{
		super();
		if (!value) throw new Error("Cannot resolve type");
		var package:String;
		var nameChain:Array/*String*/;
		_global.ASSetPropFlags(_global, null, 6, true);
		for (var p:String in _global)
		{
			if (_global[p] === value)
			{
				this._name = p;
			}
			if (!(_global[p] instanceof Object)) continue;
			nameChain = this.findRefRecursive(_global[p], [p], value);
			if (nameChain) break;
		}
		if (!this._name)
		{
			if (!nameChain)
			{
				throw new Error("Cannot resolve type");
			}
			else
			{
				this._name = String(nameChain.pop());
				package = nameChain.join(".");
				this._name = package + "::" + this._name;
			}
		}
		this._value = value;
	}
 
	public static function resolveType(value:Function):Type
	{
		for (var p:String in _tpyeHash)
		{
			trace(_tpyeHash[p]);
			if (Type(_tpyeHash[p]).valueOf() == Object(value))
				return Type(_tpyeHash[p]);
		}
		var t:Type;
		t = new Type(value);
		_tpyeHash[t.toString()] = t;
		return t;
	}
 
	public function is(value:Object):Boolean
	{
		switch (this._value)
		{
			case Boolean:
				return typeof value == "boolean";
			case String:
				return typeof value == "string";
			case Number:
				return typeof value == "number";
		}
		return Boolean(this._value(value));
	}
 
	public function valueOf():Object { return this._value; }
 
	private function findRefRecursive(where:Object/*Object*/, 
									nameChain:Array/*String*/,
									meth:Function):Array/*String*/
	{
		var o:Object;
		var nextSibling:Array/*String*/;
		for (var p:String in where)
		{
			o = where[p];
			if (o === meth)
			{
				nameChain.push(p);
				return nameChain;
			}
			else if (o instanceof Object && !(o instanceof Function))
			{
				nextSibling = this.findRefRecursive(o, nameChain.concat([p]), meth);
				if (nextSibling) return nextSibling;
			}
		}
		return null;
	}
 
	public function toString():String { return this._name; }
}
Код AS1/AS2:
import org.wvxvw.Type;
 
/**
 * ...
 * @author wvxvw
 */
class org.wvxvw.ArrayList
{
	public function get type():Type { return this._type; }
 
	public function get array():Array { return this._array.concat(); }
 
	private var _type:Type;
	private var _array:Array/*T*/;
 
	public function ArrayList(type:Type)/*T*/
	{
		super();
		this._type = type;
		this._array = [];
	}
 
	public function push(param:Object/*Null<T>*/):Number
	{
		if (param === null || this._type.is(param))
			return this._array.push(param);
		throw new Error(param + " is not a a valid type.");
		return NaN;
	}
 
	public function unshift(param:Object/*Null<T>*/):Number
	{
		if (param === null || this._type.is(param))
			return this._array.unshift(param);
		throw new Error(param + " is not a a valid type.");
		return NaN;
	}
 
	public function pop():Object/*Null<T>*/
	{
		return this._array.pop();
	}
 
	public function shift():Object/*Null<T>*/
	{
		return this._array.shift();
	}
 
	public function splice(where:Number, items:Number, 
					replaceWith:ArrayList/*T*/):ArrayList/*T*/
	{
		if (replaceWith && replaceWith.type !== this._type)
			throw new Error("Type mismatch");
		var arr:ArrayList/*T*/ = new ArrayList(this._type)/*T*/;
		var clone:Array;
		var cloneHead:Array = this._array.slice(0, where);
		var cloneTail:Array = this._array.slice(where + items, this._array.length);
		var insert:Array
		if (replaceWith)
		{
			insert = replaceWith.array;
			clone = cloneHead.concat(insert.concat(cloneTail));
		}
		else clone = cloneHead.concat(cloneTail);
		ArrayList/*T*/.setSource(arr, clone);
		return arr;
	}
 
	public function slice(from:Number, to:Number):ArrayList/*T*/
	{
		var arr:Array = this._array.splice(from, to);
		var arrList:ArrayList = new ArrayList(this._type)/*T*/;
		ArrayList/*T*/.setSource(arrList, arr);
		return arrList;
	}
 
	public function toString():String
	{
		return "ArrayList<" + this._type + ">[" + this._array.join(", ") + "]";
	}
 
	private static function setSource(to:ArrayList/*T*/, source:Array/*T*/):Void
	{
		to._array = source;
	}
}
Нечем было заняться

Самое интересное то, что если вычитать а не складывать, то результат опять же будет неправильным... и если последовательно трейсить trace(a) в первом цикле, то видно, что иногда массив не изменяется... вобщем, скорее всего какай-нибудь пропущенная команда в сгенерированом коде, либо плеер неправильно читает команду (забывает при каких-то обстоятельствах)...
__________________
Hell is the possibility of sanity

Создать новую тему   Часовой пояс GMT +4, время: 11:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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