You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

deep_walk2.js 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. _deep_walk2 = {
  2. mx_cnt:100,
  3. cnt:0,
  4. mx_depth:2,
  5. m:new Map(),
  6. }
  7. _deep_walk_dflt2 = {
  8. path:[],
  9. paths:[],
  10. names:[],
  11. kv:[],
  12. cnt:0,
  13. }
  14. function breadth_first(o,p,d){
  15. var k,v,cnt,ometa
  16. cnt = 0
  17. for ([k,v] of o){
  18. _deep_walk2.cnt +=1
  19. cnt += 1
  20. // _deep_walk2.m
  21. _deep_walk2.m.setD(v,jc(_deep_walk_dflt))
  22. ometa = _deep_walk.m.get(v)
  23. ometa.names.push(k)
  24. ometa.cnt += 1
  25. // clog()
  26. }
  27. }
  28. function get_type_proto_(o){
  29. const type = typeof(o)
  30. if (type !== "object"){
  31. return type
  32. } else if (o == null){
  33. return "null"
  34. }
  35. try {
  36. return o.__proto__
  37. } catch (err){
  38. console.log("get_type_proto_ err",err)
  39. return "err"
  40. }
  41. }
  42. vanilla_objs= new Set([get_type_proto_([]),get_type_proto_({})])
  43. function v_obj(type){
  44. return vanilla_objs.has(type)
  45. // if (vanilla_objs)
  46. }
  47. kvt_types = new Set()
  48. // rdeep(_deep_dev,window,{},0)
  49. function should_i_stop(that,o,meta,d){
  50. if (d > that.mx_depth){
  51. clog("init stop","depth",that.mx_cnt,d)
  52. that.stop = 1
  53. } else {
  54. // clog("mx~",d > that.mx_depth,d , that.mx_depth)
  55. }
  56. if (that.cnt > that.mx_cnt){
  57. clog("init stop","mx_cnt",that.mx_cnt,d)
  58. that.stop = 1
  59. }
  60. if (that.stop){
  61. return 1
  62. }
  63. }
  64. function* wlk(that,o,meta,d){
  65. // let i,k,v
  66. let ctr = 0
  67. for (let en in o){
  68. yield [ctr++,en,o[en]]
  69. }
  70. }
  71. tobj = {
  72. x:{x2:"abc"},
  73. "a":{
  74. "a2":{
  75. "a3":{a4:"xyz"},
  76. "b3":{
  77. b4:"xyz2",
  78. c4:"xyz3",
  79. },
  80. },
  81. },
  82. z:{z2:"abcz"},
  83. }
  84. tobj2 = {
  85. a:{k1:"v1"},
  86. b:{k2:"v2"},
  87. }
  88. tobj.c=tobj.a
  89. _deep_dev_dflt = {
  90. mt:new Map(),
  91. m:new Map(),
  92. mq:new Map(),
  93. mx_depth:8,
  94. // mx_depth:5,
  95. mx_cnt:3500,
  96. cnt2:0,
  97. cnt_loop:250,
  98. // mx_cnt:1500,
  99. cnt:0,
  100. }
  101. _deep_dev = window._deep_dev || _deep_dev_dflt
  102. _deep_walk_dflt3 = {
  103. path:[],
  104. paths:[],
  105. names:[],
  106. kv:[],
  107. cnt:0,
  108. depth:0,
  109. }
  110. function rdeep_init(that,o){
  111. _deep_dev = jc(_deep_dev_dflt)
  112. // _deep_dev.mq.setD(window,jc(_deep_walk_dflt3))
  113. // _deep_dev.mq.setD(tobj,jc(_deep_walk_dflt3))
  114. _deep_dev.mq.setD(APP.store.getState(),jc(_deep_walk_dflt3))
  115. // _deep_dev.mq.setD(o,jc(_deep_walk_dflt3))
  116. // _deep_dev.mq.setD("zz",jc(_deep_walk_dflt3))
  117. rdeep(_deep_dev,window,{},0)
  118. // _deep_dev
  119. }
  120. function q_up(that,o,ometa){
  121. let i,k,v
  122. var meta
  123. var new_obj
  124. for ([i,k,v] of keyVal2(o)){
  125. if (typeof(o) == "object"){
  126. // clog("")
  127. } else {
  128. // HA HA
  129. continue
  130. }
  131. // meta = jc(_deep_walk_dflt3)
  132. new_obj = _deep_dev.m.setD(v,jc(_deep_walk_dflt3))
  133. meta = _deep_dev.m.get(v)
  134. new_obj ? ( meta.depth = ometa.depth + 1 , meta.path = [...ometa.path,k]) : 0
  135. meta.names.push(k)
  136. // meta.path = [...ometa.path,k]
  137. if (k=="k2"){
  138. tobj.a.k3="!@#$%^"
  139. }
  140. meta.cnt += 1
  141. // clog("Q_UP")
  142. // clog("Q~",i,k,v,meta.cnt,new_obj)
  143. _deep_dev.mq.setD(v,meta)
  144. }
  145. }
  146. function rdeep(that,o,meta_x,d){
  147. var ometa,new_obj
  148. if (should_i_stop(that,o,meta_x,d)){
  149. clog("Stopping",that.mx_cnt,d)
  150. return
  151. }
  152. clog("!001")
  153. if (typeof(o) != "object"){
  154. return
  155. }
  156. /*
  157. if (should_i_iter(that,o,meta_x,d)){
  158. clog("Stopping",that.mx_cnt,d)
  159. return
  160. }
  161. */
  162. // let
  163. clog("!002")
  164. let i,k,v
  165. for ([k,v] of that.mq){
  166. that.cnt += 1
  167. that.cnt2 += 1
  168. if (that.cnt2 > that.cnt_loop){
  169. clog(that.cnt,that.cnt2,k,v)
  170. that.cnt2= 0
  171. }
  172. if (should_i_stop(that,o,meta_x,v.depth)){
  173. clog("Stopping",that.cnt,that.mx_cnt,v.depth)
  174. return
  175. }
  176. clog(that.cnt,v.depth,v.path)
  177. q_up(that,k,v)
  178. // tobj.a.k3="!@#$%^"
  179. // _deep_dev.mq.setD("zz2",jc(_deep_walk_dflt3))
  180. // _deep_dev.mq.setD(k,jc(_deep_walk_dflt3))
  181. // clog("M~",v.depth,k,v)
  182. }
  183. clog("!004")
  184. /*
  185. for ([i,k,v] of wlk(that,o,meta,d)){
  186. clog(d,"~",i,k,v)
  187. _deep_dev.m.setD(v,jc(_deep_walk_dflt3))
  188. // rdeep(that,v,meta,d+1)
  189. }
  190. for ([i,k,v] of wlk(that,o,meta,d)){
  191. // clog(d,"~",i,k,v)
  192. rdeep(that,v,meta,d+1)
  193. }
  194. */
  195. }
  196. //  ["features/base/conference", "conference", "_audioAnalyser", "_vadEmitter", "_vadProcessor", "_wasmInterface", "HEAP8"]
  197. //  ["features/base/conference", "conference", "_audioAnalyser", "_vadEmitter", "_vadProcessor", "_wasmInterface", "HEAP8"]
  198. // APP.store.getState()["features/base/conference"][ "conference"][ "_audioAnalyser"][ "_vadEmitter"][ "_vadProcessor"][ "_wasmInterface"][ "HEAP8"]
  199. function rdeep_init0(that,o){
  200. var meta = {
  201. path :[]
  202. }
  203. var d = 0
  204. ometa = _deep_dev.m.get(type)
  205. // new_obj = _deep_dev.mt.setD(v,jc(_deep_walk_dflt2))
  206. // ometa = _deep_dev.mt.get(v)
  207. ometa.kv.push([i,k,v])
  208. ometa.cnt += 1
  209. _deep_dev.m.setD(o,jc(_deep_walk_dflt3))
  210. // _deep_dev
  211. }
  212. function rdeep0(that,o,meta,d){
  213. var ometa,new_obj
  214. if (should_i_stop(that,o,meta,d)){
  215. clog("Stopping",that.mx_cnt,d)
  216. return
  217. }
  218. if (typeof(o) != "object"){
  219. return
  220. }
  221. /*
  222. if (should_i_iter(that,o,meta,d)){
  223. clog("Stopping",that.mx_cnt,d)
  224. return
  225. }
  226. */
  227. // let
  228. let i,k,v
  229. for ([i,k,v] of wlk(that,o,meta,d)){
  230. clog(d,"~",i,k,v)
  231. _deep_dev.m.setD(v,jc(_deep_walk_dflt3))
  232. // rdeep(that,v,meta,d+1)
  233. }
  234. for ([i,k,v] of wlk(that,o,meta,d)){
  235. // clog(d,"~",i,k,v)
  236. rdeep(that,v,meta,d+1)
  237. }
  238. }
  239. function kvt2(o){
  240. var k,v,i,cnt,ometa
  241. var new_obj
  242. var type
  243. cnt = 0
  244. if (_deep_dev.cnt > _deep_dev.cnt){
  245. return
  246. }
  247. // for ([k,v,i] of keyVal2(o)){
  248. // for ([i,k,v] of keyVal(o)){
  249. for ([i,k,v] of keyVal2(o)){
  250. type = get_type_proto_(v)
  251. if (typeof(type) == "string"){
  252. continue
  253. }
  254. _deep_dev.cnt += 1
  255. new_obj = _deep_dev.mt.setD(type,jc(_deep_walk_dflt2))
  256. ometa = _deep_dev.mt.get(type)
  257. // new_obj = _deep_dev.mt.setD(v,jc(_deep_walk_dflt2))
  258. // ometa = _deep_dev.mt.get(v)
  259. ometa.kv.push([i,k,v])
  260. ometa.cnt += 1
  261. // clog(cnt,i,k,v)
  262. cnt +=1
  263. }
  264. _deep_dev.cnt = cnt
  265. clog(cnt)
  266. }
  267. function kvt3(o,p,d){
  268. var k,v,i,cnt,ometa
  269. var new_obj
  270. var type
  271. cnt = 0
  272. // for ([k,v,i] of keyVal2(o)){
  273. // for ([i,k,v] of keyVal(o)){
  274. for ([i,k,v] of keyVal2(o)){
  275. type = get_type_proto_(v)
  276. if (typeof(type) == "string"){
  277. // continue
  278. }
  279. new_obj = _deep_dev.mt.setD(type,jc(_deep_walk_dflt2))
  280. ometa = _deep_dev.mt.get(type)
  281. // new_obj = _deep_dev.mt.setD(v,jc(_deep_walk_dflt2))
  282. // ometa = _deep_dev.mt.get(v)
  283. ometa.kv.push([i,k,v])
  284. ometa.cnt += 1
  285. // clog(cnt,i,k,v)
  286. cnt +=1
  287. }
  288. // _deep_dev.cnt = cnt
  289. clog(cnt)
  290. }
  291. // kvt2
  292. function proto_info(m){
  293. var i,k,v,v2
  294. var cnt = 0
  295. // for ([i,k,v,v2] of m){
  296. for ([k,v] of m){
  297. // clog(cnt,i,k,v)
  298. // v
  299. clog(cnt,"~",v.cnt,k,v)
  300. cnt += 1
  301. }
  302. }
  303. function search_map(m,s){
  304. // s = s.ti
  305. var i,k,v
  306. var cnt = 0
  307. for ([k,v] of m){
  308. // if (typeof(k) == "string" && k.toLowerCase().includes("tile") ){
  309. // if (typeof(k) == "string" && k.toLowerCase().includes("JiC") ){
  310. if (typeof(k) == "string" && ( k.toLowerCase().includes(s) || v.names.join().includes(s) ) ){
  311. // if (typeof(k) == "string" ){
  312. clog(cnt,k,v)
  313. cnt += 1
  314. }
  315. }
  316. }