<commit_before>/*
 * ------------------------------------------
 * 列表缓存管理基类实现文件
 * @version  1.0
 * @author   genify(<EMAIL>)
 * ------------------------------------------
 */
var f = function(){
    var _  = NEJ.P,
        _o = NEJ.O,
        _f = NEJ.F,
        _u = _('nej.u'),
        _p = _('nej.ut'),
        _proListCache,
        _supListCache;
    if (!!_p._$$ListCache) return;
    /**
     * 列表缓存管理基类<br/>
     * 脚本举例
     * [code]
     *   // 第一步：先创建自己的listCache管理类
     *   _p._$$CacheListCustom = NEJ.C();
     *   _proCacheListCustom = _p._$$CacheListCustom._$extend(_p._$$ListCache);
     *   _supCacheListCustom = _proCacheListCustom._$supro;
     *   
     *   // 注册事件
     *   _proCacheListCustom.__init = function(){
     *   this.__supInit();
     *   this._$batEvent({
     *            doloadlist:this.__doLoadList._$bind(this)
     *           ,doloaditem:this.__doLoadItem._$bind(this)
     *           ,doadditem:this.__doAddItem._$bind(this)
     *           ,dodeleteitem:this.__doDeleteItem._$bind(this)
     *           ,doupdateitem:this.__doUpdateItem._$bind(this)
     *           ,dopullrefresh:this.__doPullRefresh._$bind(this)
     *       });
     *   };
     *   // 实现取列表的方法
     *   // 根据offset+limit取列表
     *   // data表示取列表可能需要的额外数据信息
     *   // 数据返回的回调是onload
     *   _proCacheListCustom.__doLoadList = function(_options){
     *       var _key    = _options.key;
     *       var _data   = _options.data;
     *       var _offset = _options.offset;
     *       var _limit  = _options.limit;
     *       var _rkey   = _options.rkey;
     *       var _onload = _options.onload;
     *       _j._$request('http://123.163.com:3000/xhr/getLog',{
     *              type:'json',
     *              method:'POST',
     *              data:{offset:_offset,limit:_limit},
     *              timeout:1000,
     *              onload:_onload._$bind(this),
     *              onerror:function(_error){}
     *          }
     *      );
     *    };
     *    // 实现取列表的方法
     *    // 根据id和key取一项数据
     *    // 数据返回的回调是onload
     *    _proCacheListCustom.__doLoadItem = function(_options){
     *        var _id     = _options.id;
     *        var _key    = _options.key;
     *        var _rkey   = _options.rkey;
     *        var _onload = _options.onload;
     *        _j._$request('http://123.163.com:3000/xhr/getLog',{
     *               type:'json',
     *               method:'POST',
     *               data:{id:_id,key:_key},
     *               timeout:1000,
     *               onload:_onload._$bind(this),
     *               onerror:function(_error){}
     *          }
     *        );
     *    };
     * [/code]
     * 
     * [code]
     *   // 第二步：实例化一个上面的对象
     *   var _cc = c._$$CacheListCustom._$allocate({
     *       // id作为cache的标识
     *       id:'a',
     *       // 根据key，也就是上面的id，到缓存中取数据，然后处理数据
     *       onlistload:function(_ropt){
     *           _cc._$getListInCache(_ropt.key);
     *       },
     *        // 根据key，也就是上面的id，到缓存中取数据，然后处理数据
     *       onitemload:function(_ropt){
     *           _cc._$getItemInCache(_ropt.key);
     *       }
     *   });
     * [/code]
     * 
     * [code]
     *   // 第三步：发送请求
     *   // 第一个列表的请求
     *   _cc._$getList({key:'abc',data:{},offset:0,limit:10})
     *   // 不会发请求，直接走缓存
     *   _cc._$getList({key:'abc',data:{},offset:0,limit:10})
     *   // 第一个项请求
     *   _cc._$getItem({id:'abc',key:'123',data:{})
     *   // 不会发请求，直接走缓存
     *   _cc._$getItem({id:'abc',key:'123',data:{})
     * [/code]
     * @class   {nej.ut._$$ListCache} 列表缓存管理基类
     * @extends {nej.ut._$$Cache}
     * @param  {Object} 可选配置参数，已处理参数列表如下
     * @config {String} id      缓存标识，默认使用构造器缓存
     * @config {String} key     列表项标识字段，默认为id
     * @config {Object} data    列表关联数据
     * 
     * [hr]
     * 
     * @event  {onlistload} 列表载入完成回调
     * @param  {Object} 可选配置参数
     * @config {String} key      列表标识
     * @config {Number} data     其他数据信息
     * @config {Number} offset   偏移量
     * @config {Number} limit    数量
     * 
     * [hr]
     * 
     * @event  {onitemload} 缓存项载入完成回调
     * @param  {Object} 可选配置参数
     * @config {String} 项标识
     * @config {String} 列表标识
     * 
     * [hr]
     * 
     * @event  {doloadlist} 列表载入回调
     * @param  {Object} 可选配置参数
     * @config {String} key      列表标识
     * @config {Number} data     其他数据信息
     * @config {Number} offset   偏移量
     * @config {Number} limit    数量
     * 
     * [hr]
     * 
     * @event {doloaditem} 缓存项载入回调
     * @param  {Object} 可选配置参数
     * @config {String} key 列表标识
     * @config {String} id  项标识
     * 
     * [hr]
     * @event  {doadditem}
     * @param  {Object} 可选配置参数
     * @config {String} key  项标识
     * @config {String} item 项对象
     * 
     */
    _p._$$ListCache = NEJ.C();
      _proListCache = _p._$$ListCache._$extend(_p._$$Cache);
      _supListCache = _p._$$ListCache._$supro;
    /**
     * 控件重置
     * @protected
     * @method {__reset}
     * @param  {Object} 可选配置参数
     * @config {String} 列表标识
     * @config {Object} 列表关联数据
     * @return {Void}
     */
    _proListCache.__reset = function(_options){
        this.__supReset(_options);
        this.__key = _options.key||'id';
        this.__data = _options.data||_o;
        this.__doSwapCache(_options.id);
    };
    /**
     * 控件销毁
     * @protected
     * @method {__destroy}
     * @return {Void}
     */
    _proListCache.__destroy = function(){
        this.__supDestroy();
        delete this.__key;
        delete this.__data;
        delete this.__lspl;
    };
    /**
     * 切换缓存
     * @protected
     * @method {__doSwapCache}
     * @param  {String} 缓存标识
     * @return {Void}
     */
    _proListCache.__doSwapCache = function(_id){
        var _cache;
        if (!!_id){
            _cache = this.__cache[_id];
            if (!_cache){
                _cache = {};
                this.__cache[_id] = _cache;
            }
        }
        _cache = _cache||this.__cache;
        _cache.hash = _cache.hash||{};
        // hash    [Object] - item map by id
        // list    [Array]  - default list
        // x-list  [Array]  - list with key 'x'
        this.__lspl = _cache;
    };
    /**
     * 缓存列表项
     * @protected<commit_msg>not recycle cache pool ref<commit_after>/*
 * ------------------------------------------
 * 列表缓存管理基类实现文件
 * @version  1.0
 * @author   genify(<EMAIL>)
 * ------------------------------------------
 */
var f = function(){
    var _  = NEJ.P,
        _o = NEJ.O,
        _f = NEJ.F,
        _u = _('nej.u'),
        _p = _('nej.ut'),
        _proListCache,
        _supListCache;
    if (!!_p._$$ListCache) return;
    /**
     * 列表缓存管理基类<br/>
     * 脚本举例
     * [code]
     *   // 第一步：先创建自己的listCache管理类
     *   _p._$$CacheListCustom = NEJ.C();
     *   _proCacheListCustom = _p._$$CacheListCustom._$extend(_p._$$ListCache);
     *   _supCacheListCustom = _proCacheListCustom._$supro;
     *   
     *   // 注册事件
     *   _proCacheListCustom.__init = function(){
     *   this.__supInit();
     *   this._$batEvent({
     *            doloadlist:this.__doLoadList._$bind(this)
     *           ,doloaditem:this.__doLoadItem._$bind(this)
     *           ,doadditem:this.__doAddItem._$bind(this)
     *           ,dodeleteitem:this.__doDeleteItem._$bind(this)
     *           ,doupdateitem:this.__doUpdateItem._$bind(this)
     *           ,dopullrefresh:this.__doPullRefresh._$bind(this)
     *       });
     *   };
     *   // 实现取列表的方法
     *   // 根据offset+limit取列表
     *   // data表示取列表可能需要的额外数据信息
     *   // 数据返回的回调是onload
     *   _proCacheListCustom.__doLoadList = function(_options){
     *       var _key    = _options.key;
     *       var _data   = _options.data;
     *       var _offset = _options.offset;
     *       var _limit  = _options.limit;
     *       var _rkey   = _options.rkey;
     *       var _onload = _options.onload;
     *       _j._$request('http://123.163.com:3000/xhr/getLog',{
     *              type:'json',
     *              method:'POST',
     *              data:{offset:_offset,limit:_limit},
     *              timeout:1000,
     *              onload:_onload._$bind(this),
     *              onerror:function(_error){}
     *          }
     *      );
     *    };
     *    // 实现取列表的方法
     *    // 根据id和key取一项数据
     *    // 数据返回的回调是onload
     *    _proCacheListCustom.__doLoadItem = function(_options){
     *        var _id     = _options.id;
     *        var _key    = _options.key;
     *        var _rkey   = _options.rkey;
     *        var _onload = _options.onload;
     *        _j._$request('http://123.163.com:3000/xhr/getLog',{
     *               type:'json',
     *               method:'POST',
     *               data:{id:_id,key:_key},
     *               timeout:1000,
     *               onload:_onload._$bind(this),
     *               onerror:function(_error){}
     *          }
     *        );
     *    };
     * [/code]
     * 
     * [code]
     *   // 第二步：实例化一个上面的对象
     *   var _cc = c._$$CacheListCustom._$allocate({
     *       // id作为cache的标识
     *       id:'a',
     *       // 根据key，也就是上面的id，到缓存中取数据，然后处理数据
     *       onlistload:function(_ropt){
     *           _cc._$getListInCache(_ropt.key);
     *       },
     *        // 根据key，也就是上面的id，到缓存中取数据，然后处理数据
     *       onitemload:function(_ropt){
     *           _cc._$getItemInCache(_ropt.key);
     *       }
     *   });
     * [/code]
     * 
     * [code]
     *   // 第三步：发送请求
     *   // 第一个列表的请求
     *   _cc._$getList({key:'abc',data:{},offset:0,limit:10})
     *   // 不会发请求，直接走缓存
     *   _cc._$getList({key:'abc',data:{},offset:0,limit:10})
     *   // 第一个项请求
     *   _cc._$getItem({id:'abc',key:'123',data:{})
     *   // 不会发请求，直接走缓存
     *   _cc._$getItem({id:'abc',key:'123',data:{})
     * [/code]
     * @class   {nej.ut._$$ListCache} 列表缓存管理基类
     * @extends {nej.ut._$$Cache}
     * @param  {Object} 可选配置参数，已处理参数列表如下
     * @config {String} id      缓存标识，默认使用构造器缓存
     * @config {String} key     列表项标识字段，默认为id
     * @config {Object} data    列表关联数据
     * 
     * [hr]
     * 
     * @event  {onlistload} 列表载入完成回调
     * @param  {Object} 可选配置参数
     * @config {String} key      列表标识
     * @config {Number} data     其他数据信息
     * @config {Number} offset   偏移量
     * @config {Number} limit    数量
     * 
     * [hr]
     * 
     * @event  {onitemload} 缓存项载入完成回调
     * @param  {Object} 可选配置参数
     * @config {String} 项标识
     * @config {String} 列表标识
     * 
     * [hr]
     * 
     * @event  {doloadlist} 列表载入回调
     * @param  {Object} 可选配置参数
     * @config {String} key      列表标识
     * @config {Number} data     其他数据信息
     * @config {Number} offset   偏移量
     * @config {Number} limit    数量
     * 
     * [hr]
     * 
     * @event {doloaditem} 缓存项载入回调
     * @param  {Object} 可选配置参数
     * @config {String} key 列表标识
     * @config {String} id  项标识
     * 
     * [hr]
     * @event  {doadditem}
     * @param  {Object} 可选配置参数
     * @config {String} key  项标识
     * @config {String} item 项对象
     * 
     */
    _p._$$ListCache = NEJ.C();
      _proListCache = _p._$$ListCache._$extend(_p._$$Cache);
      _supListCache = _p._$$ListCache._$supro;
    /**
     * 控件重置
     * @protected
     * @method {__reset}
     * @param  {Object} 可选配置参数
     * @config {String} 列表标识
     * @config {Object} 列表关联数据
     * @return {Void}
     */
    _proListCache.__reset = function(_options){
        this.__supReset(_options);
        this.__key = _options.key||'id';
        this.__data = _options.data||_o;
        this.__doSwapCache(_options.id);
    };
    /**
     * 切换缓存
     * @protected
     * @method {__doSwapCache}
     * @param  {String} 缓存标识
     * @return {Void}
     */
    _proListCache.__doSwapCache = function(_id){
        var _cache;
        if (!!_id){
            _cache = this.__cache[_id];
            if (!_cache){
                _cache = {};
                this.__cache[_id] = _cache;
            }
        }
        _cache = _cache||this.__cache;
        _cache.hash = _cache.hash||{};
        // hash    [Object] - item map by id
        // list    [Array]  - default list
        // x-list  [Array]  - list with key 'x'
        this.__lspl = _cache;
    };
    /**
     * 缓存列表项
     * @protected
{'fraction_non_alphanumeric': 0.15920438732913153, 'fraction_numerical': 0.006875665056887943, 'mean_word_length': 1.5016380016380015, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5690825', 'n_tokens_mistral': 4773, 'n_tokens_neox': 4858, 'n_words': 636}