//config 配置文件

import fsys;
import fsys.table;
namespace fsys;

class config{
	ctor( cfgDir = "/res/config/" ) {
		if( __cache[cfgDir] )
			return __cache[cfgDir];
			
		 this._cfgDir = cfgDir; 
		 __cache[cfgDir] = this;
	};
	@meta;
};

namespace config{
	__cache = { @{_weak="kv"}; }
	
	meta = {
		_get = function(k) { 
			if(k[1] == '_'#) // e.g. _safearray,_struct
				return;
			
			..fsys.createDir( owner[["_cfgDir"]] )	
			cfg = ..fsys.table(owner[["_cfgDir"]] ++ k ++ ".table")
			cfg.load();
			
			..table.add_gc( cfg,"save" ); 
			owner[[k]] = cfg; 
			return cfg; 
		}
		_set = function(k,v){ 
			error('fsys.config对象的成员对应只读的配置文件名称,不可修改!',2)
		}  
	}	
};
 
/**intellisense()
fsys.config = 配置文件支持库,\n可方便的将table对象序列化为硬盘文件. 
fsys.config("/res/config/") = 创建fsys.config对象,\n参数指定默认目录.\nfsys.config对象的成员都映射到该目录下的同名文件.\n配置文件首次使用时自动创建,程序退出时自动保存.
fsys.config() = 在默认目录"/res/config/"下创建fsys.config对象;
end intellisense**/
