Archive for the ‘Classes’ Category.

CSselector

DisplayObjectContainer로부터 특정 자식을 선택하는 문자열을 해석해주는 셀렉터 클래스입니다.
되도록이면 W3C CSS3 selector 규격에 수렴하게 작성되었고, 애시당초 Jquery에 영감을 얻어(도용해^^) ASquery를 만들까 하다가 selector로 이름 지은거라 자연스럽게 그렇게 표준을 따르게 되었습니다.
쿼리 방식은 간단합니다. 항상 셀렉트쿼리 문자열과 그 쿼리를 검색할 DisplayObjectContainer를 보내주면 결과로서 배열 또는 하나의 DisplayObject를 반환합니다. 호스트코드 샘플을 보시는 편이 빠르겠죠.

//name 속성 기반의 질의는 css의 class처럼 . 을 사용한다.---------------------------

	// this의 자식 중 name = 'menu1' 인 자식을 찾는다.
	CSselector.G( '.menu1', this );

	// 정규표현식을 지원해 아래와 같은 예는 'menu'로 시작하는 'menu1', menu2'..등을 모두 찾아 배열로 반환한다.
	CSselector.G( './menu[0-9]+/', this );

//컨테이너 내에서의 index번호는 css의 id처럼 #으로 접근한다.---------------------------

	// getChildAt(3) 를 대체하기 위한 예
	CSselector.G( '#3', this );

	// 범위식을 지원한다. 1~5번까지의 자식
	CSselector.G( '#1~5', this );

//클래스이름을 통해 해당 타입을 찾아 반환한다.-----------------------------------------

	//자식중 Bitmap객체를 찾아 배열로 반환한다.
	CSselector.G( 'Bitmap', this );

	// DisplayObject,DisplayObjectContainer,InteractiveObject,Shape,Bitmap,
	// SimpleButton,Loader,Sprite,MovieClip,Video,TextField 는 클래스이름만 쓰면 되나
	// 그 외의 클래스는 반드시 전체 패키지경로로 기술해야 함. applicationDomain은 시스템만 지원
	CSselector.G ( 'com.bsidesoft.particle.Cstar', this ); //Cstar객체만 찾아 반환한다.
//*선택자를 지원한다.-----------------------------------------
	CSselector.G ( '*', this ); //모든 자식을 배열에 담아 반환한다.

Continue reading ‘CSselector’ »

CSexpression

문자열로 된 수식을 해석하는 expression 클래스
Continue reading ‘CSexpression’ »

CarraySearch

수많은 검색 정렬 알고리즘이 있습니다.
하지만 추가메모리를 하나도 요구하지 않는 알고리즘은 없습니다. 이제 설명하게 되는 검색방식은 Object객체의 메모리 접근방식을 사용하는 형태로 대규모 데이터에서 indexOf에 비해 탁월한 성능을 보여줍니다. 알고리즘이라 부를 것도 없고, 단순히 검색용 데이터를 한 쌍 더 저장하는 방식입니다. 속도 상 Object가 유리하지만 배열에 들어갈 값이 기본형이 아닌 경우 Dictionary로 대체하면 됩니다.

package com.bsidesoft.ds{

	final public class CarraySearch{

		public var length:uint;
		private var _data:Array;
		private var _search:Object;

		public function CarraySearch($d:Array=null) {
			if($d){
				_data=$d;
				_search={};
				for(var o:String in $d)_search[_data[o]]=o;
				length=_data.length;
			}else{
				_data=[];
				_search={};
				length=0;
			}
		}
		public function push($val:Object):void{
			++length;
			_data[length]=$val;
			_search[$val]=length;
		}
		public function indexOf($val:Object):uint{
			return _search[$val];
		}
	}
}

핵심은 push에서 데이터를 입력받을때 search쪽도 같이 잡아준다는 사실입니다.
샘플 코드는 아래와 같습니다.

var arr:CarraySearch;
arr=new CarraySearch([405,203,248,32,1,304]);
trace(arr.indexOf(203));//1출력

CcircleStack

package com.bsidesoft.ds{

	final public class CcircleStack{

		public var length:int;

		private var _dataObj:Object={};
		private var _head:int;
		private var _tail:int;
		private var _cursor:int;

		public function CcircleStack(l:int=5){
			length=l;
			clear();
		}
		public function push(val:Object):void{
			_dataObj[_tail]=val;
			++_tail;
			if(_tail===length)_tail=0;
			if(_tail===_head){
				++_head;
				if(_head===length)_head=0;
			}
		}
		public function pop():Object{
			if(_head!==_tail){
				--_tail;
				if(_tail<0)_tail=length-1;
				return _dataObj[_tail];
			}
			return null;
		}
		public function indexOf(idx:int=0):Object{
			idx+=_tail-1;
			if(idx<0){idx+=length}
			else if(idx>=length){idx-=length}
			return _dataObj[idx];
		}
		public function clear():void{
			for(var i:int=0;i

Cstack

package com.bsidesoft.ds{

	final public class Cstack{

		private var _dataArr:Array;
		private var _size:int;

		public function Cstack(size:int=5) {
			_dataArr=[];
			_size=size;
		}
		public function push(val:Object):void{
			_dataArr.push(val);
			if(_dataArr.length>_size)_dataArr.shift();
		}
		public function pop():Object{
			if(_dataArr.length>0)return _dataArr.shift();
			return null;
		}
		public function clear():void{_dataArr=[]}
		public function remove():void{_dataArr=null}
		public function toString(sep:String=","):String{
			for(var i:int=0,j:int=_dataArr.length,tmp:String='';i0?sep:'')+_dataArr[i].toString();
			return tmp;
		}
		public function get size():int{return _size}
		public function get length():int{return _dataArr.length}
	}
}