12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- ;(function(){
- function Radix(){
- var radix = function(key, val, t){
- key = ''+key;
- if(!t && u !== val){
- radix.last = (key < radix.last)? radix.last : key;
- radix.sort = null;
- }
- t = t || radix[_] || (radix[_] = {});
- var i = 0, l = key.length-1, k = key[i], at, tmp;
- while(!(at = t[k]) && i < l){
- k += key[++i];
- }
- if(!at){
- if(!map(t, function(r, s){
- var ii = 0, kk = '';
- while(s[ii] == key[ii]){
- kk += s[ii++];
- }
- if(kk){
- if(u === val){
- if(ii <= l){ return }
- return (tmp || (tmp = {}))[s.slice(ii)] = r;
- }
- var __ = {};
- __[s.slice(ii)] = r;
- (__[key.slice(ii)] = {})[$] = val;
- (t[kk] = {})[_] = __;
- delete t[s];
- return true;
- }
- })){
- if(u === val){ return; }
- (t[k] || (t[k] = {}))[$] = val;
- }
- if(u === val){
- return tmp;
- }
- } else
- if(i == l){
- if(u === val){ return (u === (tmp = at[$]))? at[_] : tmp }
- at[$] = val;
- } else {
- if(u !== val){ at.sort = null }
- return radix(key.slice(++i), val, at[_] || (at[_] = {}));
- }
- }
- return radix;
- };
- Radix.map = function map(radix, cb, opt, pre){ pre = pre || [];
- var t = radix[_] || radix, keys = radix.sort || (radix.sort = Object.keys(t).sort()), i = 0, l = keys.length;
- for(;i < l; i++){ var key = keys[i], tree = t[key], tmp;
- if(u !== (tmp = tree[$])){
- tmp = cb(tmp, pre.join('') + key, key, pre);
- if(u !== tmp){ return tmp }
- } else
- if(opt){
- cb(u, pre.join(''), key, pre);
- }
- if(tmp = tree[_]){
- pre.push(key);
- tmp = map(tree, cb, opt, pre);
- //tmp = map(tmp, cb, opt, pre);
- if(u !== tmp){ return tmp }
- pre.pop();
- }
- }
- };
- Object.keys = Object.keys || function(o){ return map(o, function(v,k,t){t(k)}) }
- if(typeof window !== "undefined"){
- var Gun = window.Gun;
- window.Radix = Radix;
- } else {
- var Gun = require('../gun');
- try{ module.exports = Radix }catch(e){}
- }
-
- var map = Gun.obj.map, no = {}, u;
- var $ = String.fromCharCode(30), _ = String.fromCharCode(29);
-
- }());
|