getArray method

dynamic getArray(
  1. String chr, [
  2. int? dim
])

Implementation

getArray( String chr, [int? dim] ){
	_setEnv();

	List<dynamic> _array = [];
	int _dim = -1;
	List<int> _index = [];

	int code;
	dynamic token;

	int i;
	ClipToken array = _param.array().makeToken( ClipToken(), ClipMath.char( chr ) );
	array.beginGetToken();
	while( array.getToken() ){
		code  = ClipToken.curCode();
		token = ClipToken.curToken();
		if( code == ClipGlobal.codeArrayTop ){
			_dim++;
			if( _index.length <= _dim ){
				_index.add( 0 );
			}
		} else if( code == ClipGlobal.codeArrayEnd ){
			_index[_dim] = 0;
			_dim--;
			if( _dim >= 0 ) {
				_index[_dim]++;
			}
		} else if( code == ClipGlobal.codeConstant ){
			if( (dim == null) || (dim == _dim + 1) ){
				if( _dim > 0 ){
					if( _array.length <= _index[0] ){
						for( i = _array.length; i <= _index[0]; i++ ) {
							_array.add( [] );
						}
					}
					if( _array[_index[0]] is! List ){
						_array[_index[0]] = [];
					}
				}
				if( _dim > 1 ){
					if( _array[_index[0]].length <= _index[1] ){
						for( i = _array[_index[0]].length; i <= _index[1]; i++ ) {
							_array[_index[0]].add( [] );
						}
					}
					if( _array[_index[0]][_index[1]] is! List ){
						_array[_index[0]][_index[1]] = [];
					}
				}
				if( _dim > 2 ){
					if( _array[_index[0]][_index[1]].length <= _index[2] ){
						for( i = _array[_index[0]][_index[1]].length; i <= _index[2]; i++ ) {
							_array[_index[0]][_index[1]].add( [] );
						}
					}
					if( _array[_index[0]][_index[1]][_index[2]] is! List ){
						_array[_index[0]][_index[1]][_index[2]] = [];
					}
				}
				switch( _dim ){
					case 0:
						if( _array.length <= _index[0] ){
							for( i = _array.length; i <= _index[0]; i++ ) {
								_array.add( 0.0 );
							}
						}
						if( _array[_index[0]] is! List ){
							_array[_index[0]] = token.toFloat();
						}
						break;
					case 1:
						if( _array[_index[0]].length <= _index[1] ){
							for( i = _array[_index[0]].length; i <= _index[1]; i++ ) {
								_array[_index[0]].add( 0.0 );
							}
						}
						if( _array[_index[0]][_index[1]] is! List ){
							_array[_index[0]][_index[1]] = token.toFloat();
						}
						break;
					case 2:
						if( _array[_index[0]][_index[1]].length <= _index[2] ){
							for( i = _array[_index[0]][_index[1]].length; i <= _index[2]; i++ ) {
								_array[_index[0]][_index[1]].add( 0.0 );
							}
						}
						if( _array[_index[0]][_index[1]][_index[2]] is! List ){
							_array[_index[0]][_index[1]][_index[2]] = token.toFloat();
						}
						break;
					case 3:
						if( _array[_index[0]][_index[1]][_index[2]].length <= _index[3] ){
							for( i = _array[_index[0]][_index[1]][_index[2]].length; i <= _index[3]; i++ ) {
								_array[_index[0]][_index[1]][_index[2]].add( 0.0 );
							}
						}
						if( _array[_index[0]][_index[1]][_index[2]][_index[3]] is! List ){
							_array[_index[0]][_index[1]][_index[2]][_index[3]] = token.toFloat();
						}
						break;
				}
			}
			_index[_dim]++;
		}
	}

	return _array;
}