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

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

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Упрощенная генерация воспроизводимых уникальных ключей

Код AS3:
import flash.utils.Proxy;
import flash.utils.flash_proxy;
 
internal dynamic final class AlphaProps extends Proxy
{
	public function get token():String
	{
		if (_needHashRegen)
		{
			_hash = hash(toString().replace(/\W+/g, ""));
			_needHashRegen = false;
		}
		return _hash;
	}
 
	private var _keys:Array = [];
	private var _props:Object = { };
	private var _needHashRegen:Boolean;
	private var _hash:String;
 
	public function AlphaProps() { super(); }
 
	public function toString():String
	{
		var r:String = "";
		for (var p:String in this) r += p + "=\"" + this[p] + "\" ";
		return r;
	}
 
	override flash_proxy function getProperty(name:*):* { return _props[name]; }
 
	override flash_proxy function setProperty(name:*, value:*):void 
	{
		_needHashRegen = true;
		_keys.push(name);
		_keys.sort();
		_props[name] = value;
	}
 
	override flash_proxy function nextName(index:int):String { return _keys[index - 1]; }
 
	override flash_proxy function nextNameIndex(index:int):int 
	{
		if (_keys.length > index) return index + 1;
		return 0;
	}
 
	override flash_proxy function nextValue(index:int):* { return _props[_keys[index]]; }
 
	private static function hash(input:String):String
	{
		while (input.length % 8) input += "z";
		var ilt:int = input.length;
		var chklt:int = ilt / 8;
		if (chklt > 31) throw new Error("Input to long.");
		var arr:Array = [];
		var wlt:int;
		var wsum:int;
		var i:int;
		var ix:int;
		var rs:String = "";
		var p:String;
		while (arr.length < 8)
		{
			arr.push(input.substr(chklt * arr.length, chklt));
		}
		for (ix = 0; ix < 8; ix++)
		{
			p = arr[ix];
			wlt = p.length;
			wsum = 0;
			i = 0;
			while (i < chklt)
			{
				wsum += p.charCodeAt(i);
				wsum += wsum % p.charCodeAt(i);
				i++;
			}
			rs = wsum.toString(32);
			while (rs.length < 3) rs = "0" + rs;
			arr[ix] = wlt.toString(32) + rs;
		}
		return arr.join("");
	}
}
Собстенно, интересует ваше мнение по поводу private static function hash(input:String):String. На сколько ее можо считать надежной? Т.е. она не нужна для какой-то защиты / безопасности и т.п. просто нужен простой способ сравнить 2 динамических объекта на предмет наличия у них одинаковых свойств (свойства всегда будут иметь только строковые значения, и вряд ли их будет очень много, 50 - уже заоблачная цифра), соответственно, и имена свойств не располагают к наличию таких колизий... просто не хочется что-то очень заумное писать...

Да, и если есть вариант генерить ключи по-короче - было бы здорово
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 18.03.2009 в 04:30.
Создать новую тему   Часовой пояс GMT +4, время: 01:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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