Commit graph

392 commits

Author SHA1 Message Date
Nathan Marz
c80bf573a5 updated tests, lots of errors 2016-09-01 20:32:38 -04:00
Nathan Marz
6549be1be5 protpaths and parameterized protpaths working 2016-09-01 17:35:19 -04:00
Nathan Marz
e057ee8d22 add note about original-obj 2016-09-01 17:04:58 -04:00
Nathan Marz
e571df5832 add code to avoid embedding functions with metadata on them (which kills perf) 2016-09-01 16:59:40 -04:00
Nathan Marz
f8d74d5884 add direct nav hints 2016-09-01 16:31:00 -04:00
Nathan Marz
479cb7d023 re-implemented declarepath and providepath, added local-declarepath for making recursive/mutually-recursive navigators locally 2016-09-01 13:56:51 -04:00
Nathan Marz
4c570e5de4 fixes + manual inlining for keypath, must, view 2016-09-01 11:24:15 -04:00
Nathan Marz
c80a2d3c50 fixes 2016-09-01 10:04:51 -04:00
Nathan Marz
eb5de0bdd5 lots of progress 2016-08-31 22:30:28 -04:00
Nathan Marz
f511cd4fca initial rewriting 2016-08-29 22:01:17 -04:00
Nathan Marz
a35cacae67 have defnav generate every method as a helper function as well (with name <name>-<method-name>, takes params as initial arguments followed by regular method arguments (except for 'this') 2016-08-17 09:42:59 -04:00
Nathan Marz
21f117503e allow non-dynamic vars to be treated as constants and add test for constant detection 2016-08-13 15:59:38 -04:00
Nathan Marz
1b5b19c7c8 fix accidental coercion to rich nav 2016-08-13 09:23:23 -04:00
Nathan Marz
ac3f604211 reformat code with parinfer 2016-08-11 10:13:27 -04:00
Nathan Marz
87137c633d minor refactoring of macros 2016-08-10 15:45:13 -04:00
Nathan Marz
9db244ebe5 always preserve persistentarraymap for ALL and MAP-VALS, also improve performance of those cases by almost 2x 2016-08-09 12:27:46 -04:00
Nathan Marz
9a35c0666d define pred using defnav so it uses lean navigation when possible 2016-08-08 10:16:32 -04:00
Nathan Marz
74f38d93a9 switch from cljx to cljc 2016-08-06 10:40:45 -04:00
Nathan Marz
c4f5a1b02b if set is constant make a static navigator for it 2016-08-06 02:23:11 -04:00
Nathan Marz
b9cd024c38 parameterize navigators immediately if all params are constant (rather than factor) 2016-08-06 00:44:40 -04:00
Nathan Marz
56da47aca5 generate a real higher order function from defnav and defcollector that returns a lean compiled path when invoked but coerces to equivalent paramsneededpath when composed, change nav constructors to recognize this and use a lean proxy for this case 2016-08-05 17:59:12 -04:00
Nathan Marz
7bfad80e00 fix for cljs 2016-08-05 16:34:58 -04:00
Nathan Marz
073dca1e98 add missing file 2016-08-05 16:21:49 -04:00
Nathan Marz
cbd3db5a75 all tests passing 2016-08-05 16:18:10 -04:00
Nathan Marz
e7db1803b1 fixes 2016-08-05 15:48:55 -04:00
Nathan Marz
e7dc940cd0 completely re-implement nav, collector, fixed-pathed-nav, and pathed-collector in cleaner and more flexible way 2016-08-05 14:10:38 -04:00
Nathan Marz
33d19ebd1d cljs tests passing 2016-08-04 22:40:53 -04:00
Nathan Marz
4005aca92e get cljs compiling 2016-08-04 16:32:54 -04:00
Nathan Marz
4460ee313e all tests passing 2016-08-04 16:20:23 -04:00
Nathan Marz
53682de1eb more fixes 2016-08-04 16:03:59 -04:00
Nathan Marz
423da1e03f more fixes 2016-08-04 15:03:00 -04:00
Nathan Marz
73312bffd7 fixes 2016-08-04 13:47:54 -04:00
Nathan Marz
3ba0926251 refactor codebase to use reified navigator objects instead of individual functions, force all navigators to be defined using defnav, add ImplicitNav protocol 2016-08-04 11:28:47 -04:00
Nathan Marz
9c9b19af26 fix error when using specter with aot 2016-06-27 17:32:02 -04:00
Nathan Marz
b7191b11c2 update docs and changelog 2016-06-23 12:40:39 -04:00
Nathan Marz
b060339573 major optimization to multi-path by removing sequence operations at runtime 2016-06-23 12:35:47 -04:00
Nathan Marz
18680437aa optimize terminal-val with fast-constantly 2016-06-22 21:18:38 -04:00
Nathan Marz
898d7489a6 add terminal-val 2016-06-22 21:17:14 -04:00
Nathan Marz
2f5d601ccf implemented multi-transform and terminal 2016-06-22 21:17:13 -04:00
Nathan Marz
d1e32be13b fix exception when using val collection with setval 2016-06-22 21:14:35 -04:00
Nathan Marz
9ff9ef6650 Fix #128 2016-06-21 18:38:00 -04:00
Nathan Marz
e4ee703a09 update richnav comment 2016-06-16 09:44:30 -04:00
Nathan Marz
66f555ab73 fix multi-path + val collection and minor problem in if-path 2016-06-16 09:42:24 -04:00
Nathan Marz
36f0e63d56 added richnav and fixed if-path with value collection 2016-06-16 09:09:29 -04:00
Nathan Marz
c709b16eab ALL and MAP-VALS perf improvement for small maps 2016-06-15 17:18:58 -04:00
Nathan Marz
ef8039cacc error if pathed fn used where navigator expected 2016-06-15 11:41:12 -04:00
Nathan Marz
f5baf819c0 fix typo 2016-06-15 10:32:50 -04:00
Nathan Marz
85b91d19c4 rearrange code for bootstrap compatibility 2016-06-14 08:45:11 -04:00
Nathan Marz
ecda5e2cff rearrange code to hide riddley usage from bootstrap 2016-06-13 19:49:35 -04:00
Nathan Marz
aedb7235f9 add note on implementation detail of using cljs.analyzer 2016-06-13 17:25:29 -04:00
Nathan Marz
8c128816f5 get macroexpansion for clojurescript working correctly so that collected? works inside inline paths 2016-06-13 17:23:23 -04:00
Nathan Marz
c82c3b71d8 add note about not being able to use collected? inline in a path when using cljs, disable that test for cljs 2016-06-13 15:26:08 -04:00
Nathan Marz
a687f4a0bc test for traverse + make it work in cljs 2016-06-13 14:51:20 -04:00
Nathan Marz
66d1ce65f3 Merge branch 'master' into traverse 2016-06-13 13:51:03 -04:00
Nathan Marz
f26aa001eb make MAP-VALS work on nil 2016-06-11 09:51:28 -04:00
Nathan Marz
3dc7ad25ff added collected? and DISPENSE navigators 2016-06-10 07:57:18 -04:00
Nathan Marz
e20278cf97 fix typo in docstring 2016-06-09 23:19:34 -04:00
Nathan Marz
911dab5e52 add non-init reduce case to traverse 2016-06-09 23:19:12 -04:00
Nathan Marz
f605167a53 implement traverse 2016-06-09 23:19:11 -04:00
Nathan Marz
3af11575d7 fix typos in docstrings 2016-06-09 23:19:03 -04:00
Nathan Marz
0c4c4369a2 eliminate compiler performance warning regarding case 2016-06-09 17:32:40 -04:00
Nathan Marz
b22ff2bb2a add in transients namespace 2016-06-09 08:46:29 -04:00
Nathan Marz
4565a7e7d6 fail cljs build on any warnings, eliminate warning about com.rpl.specter.transient namespace by renaming to transients 2016-06-09 08:06:17 -04:00
Nathan Marz
98343784bf fix end, last, beginning, and first to work on nil 2016-06-08 14:42:24 -04:00
Nathan Marz
9045e13386 merge 2016-06-08 13:58:15 -04:00
Alex Engelberg
fbb7a17197 Add META navigator, test case, and benchmarks 2016-06-08 08:18:10 -07:00
Nathan Marz
49957f2536 Merge pull request #107 from aengelberg/transient-navigators
Transient navigators
2016-06-08 05:48:51 -04:00
Alex Engelberg
2147584dca Change reduce to reduce-kv 2016-06-07 23:16:54 -07:00
Nathan Marz
0f475ddba3 merge in optimizations to END 2016-06-07 16:11:21 -04:00
Nathan Marz
5161f6dfbf optimize END for vectors 2016-06-07 16:07:01 -04:00
Nathan Marz
ec05c14225 document exact semantics of select*/transform* needed for Navigator 2016-06-07 14:34:32 -04:00
Nathan Marz
e698f5f06b bump version, optimized multi-path select, lots of select-any tests 2016-06-07 12:35:59 -04:00
Nathan Marz
205b6a1319 fix MAP-VALS 2016-06-07 10:51:08 -04:00
Nathan Marz
6580f4df4b added selected-any? helper operation 2016-06-07 10:47:18 -04:00
Nathan Marz
81ec559e69 docstring for MAP-VALS 2016-06-07 10:31:07 -04:00
Nathan Marz
e76363c532 more docstrings and benchmarks 2016-06-07 10:18:20 -04:00
Nathan Marz
88a79e3d77 add docstrings for new API elements 2016-06-07 09:40:14 -04:00
Nathan Marz
a4c941b744 cljs compatible 2016-06-07 00:49:52 -04:00
Nathan Marz
68ac32ef56 optimize if-path and selected? for non basic fn case 2016-06-06 21:30:14 -04:00
Nathan Marz
f3bf935509 new semantics for select* for increased performance, new select-any operation with maximal query performance, needs more tests 2016-06-06 20:29:45 -04:00
Nathan Marz
ae98aa48ba add specialized MAP-VALS navigator to circumvent the unavoidable overhead of [ALL LAST] 2016-06-06 16:03:08 -04:00
Nathan Marz
571ba316da Fix #109 2016-06-06 07:48:30 -04:00
Nathan Marz
c81ba0196f eliminate warning about intern for bootstrap cljs 2016-06-06 07:38:21 -04:00
Alex Engelberg
399e5661f1 The (identical?) trick doesn't work in cljs, but select-keys does 2016-06-05 22:11:34 -07:00
Alex Engelberg
25ba21d9ee Remove no-longer-used transient-all-select|transform 2016-06-05 21:47:44 -07:00
Alex Engelberg
cb0dc261cf Add tests for transients, fix transient navigators based on test failures 2016-06-05 21:38:14 -07:00
Alex Engelberg
067ce9edee Remove ALL! and filterer! 2016-06-05 11:11:14 -07:00
Alex Engelberg
b3e581f737 WIP, transient navigators 2016-06-05 10:08:30 -07:00
Nathan Marz
ff903cd236 optimize selected? and not-selected? 2016-06-04 22:57:56 -04:00
Nathan Marz
f82ab31b36 expand optimized if-path to encompass any sequence of static functions 2016-06-04 21:22:57 -04:00
Nathan Marz
2d3902f478 huge speedup to if-path when condition is a single statically known function, big optimization for all transforms that don't use value collection by using identical? instead of empty? 2016-06-04 20:49:57 -04:00
Nathan Marz
94d5d2021a add nil case for all-transform 2016-06-04 17:22:27 -04:00
Nathan Marz
a4857a9d57 Fix #96 2016-06-04 17:19:39 -04:00
Nathan Marz
86f05b3cbe major performnace enhancements for ALL on vectors (2x) and maps (10% for arraymas, 25% for hashmaps) 2016-06-04 17:12:40 -04:00
Nathan Marz
0bc26c950e implement cond-path in terms of if-path to avoid all runtime sequence operations 2016-06-04 16:40:34 -04:00
Nathan Marz
ff2853381c huge speedup to if-path by having specialized implementation separate from cond-path 2016-06-04 15:01:28 -04:00
Nathan Marz
59423c358e huge speedup for cond-path 2016-06-04 14:51:26 -04:00
Nathan Marz
b6e1f5f20f defprotocolpath docstring 2016-06-04 14:30:38 -04:00
Nathan Marz
57a2e967d4 defpathedfn docstring 2016-06-04 14:23:09 -04:00
Nathan Marz
58865ee10d fill in missing docstrings 2016-06-04 09:40:41 -04:00
Nathan Marz
d9443232d8 add docstrings to the core select/transform/etc. macros 2016-06-04 09:29:45 -04:00
Nathan Marz
e1138747d9 fix #103 2016-06-03 16:25:27 -04:00
Nathan Marz
d85f21722b set up to generate html api docs 2016-06-02 11:59:19 -04:00
Nathan Marz
52740d56ac add :notpath metadata for pathedfn args that should not be interpreted as paths during inline factoring/caching, fixed transformed to operate appropriately in inline factoring when transform-fn is anonymous or local, drop support for cljs below v1.7.10 2016-06-02 02:42:18 -04:00
Nathan Marz
8a0ba0b3b0 eliminate last cljs compiler warning 2016-06-02 01:15:35 -04:00
Nathan Marz
c1d9dff75e eliminate most of cljs warnings except for one 2016-06-01 20:54:04 -04:00
Nathan Marz
187299b3d9 make non 1 or 2 count case update-last faster for vectors, change updateextremes to be specific to persistentvector 2016-06-01 12:54:59 -04:00
Nathan Marz
2fe16769ff use nth instead of get for retrieving first element of vector 2016-06-01 12:42:41 -04:00
Nathan Marz
39a3755b49 implement optimized extremes protocols and fastempty for IPersistentVector rather than PersistentVector 2016-06-01 12:33:10 -04:00
Nathan Marz
edfcc92a85 big optimization for LAST for small vectors (e.g. those used for mapentries) 2016-06-01 12:27:02 -04:00
Nathan Marz
1c21be2262 minor performance optimizations to FIRST/LAST 2016-06-01 12:02:41 -04:00
Nathan Marz
6b7d18d874 use reduce-kv to optimize ALL transform on maps, significant performance boost 2016-06-01 11:08:49 -04:00
Nathan Marz
fbca7ab99c stop using ConcurrentHashMap for inline cache, instead intern a new var at macro-time. 17% performance improvement for [:a :b :c] benchmark 2016-05-31 23:04:24 -04:00
Nathan Marz
cb3b33f63b another bootstrap compatibility change (from @mfikes) 2016-05-29 10:15:03 -04:00
Nathan Marz
d162c2b49f advise cljs compiler not to warn about undeclared var instead of the hack that was being used before 2016-05-29 09:06:51 -04:00
Nathan Marz
637f7fc819 code cleanup 2016-05-29 00:34:51 -04:00
Nathan Marz
f49f371eea eliminate undeclared var warning from cljs inline caching code 2016-05-28 21:06:43 -04:00
Nathan Marz
2c52355f8d remove todo 2016-05-28 20:01:35 -04:00
Nathan Marz
e5db7252c3 use local def for cljs inline cache. faster and enables bootstrap compatibility 2016-05-28 20:01:10 -04:00
Nathan Marz
bb5fcbe7b3 bootstrap compatibility changes 2016-05-28 19:00:58 -04:00
Nathan Marz
e2e8fa091e Added continuous-subseqs navigator 2016-05-28 13:57:30 -04:00
Nathan Marz
22f0b7e5e1 minor inline caching failure string improvements 2016-05-25 00:13:46 -04:00
Nathan Marz
b927d8e241 major optimization for use case of passing an already compiled path to inline caching specter operations 2016-05-24 17:39:08 -04:00
Nathan Marz
73e460df80 optimization for using comp-paths on already compiled path 2016-05-24 17:29:34 -04:00
Nathan Marz
b8bcfd6054 change how macroexpansion is done during inline caching so that nested &env are correctly computed. Allows for inline caching to occur nested inside an inline caching expression 2016-05-24 17:01:17 -04:00
Nathan Marz
d7db4190dd fix nav constructors for cljs 2016-05-24 16:06:32 -04:00
Nathan Marz
e70cfb3623 added nav constructors + tests, fixed bug with clj platform eval'd params fn to bind to the namesapace where the path was defined 2016-05-24 16:00:22 -04:00
Nathan Marz
cd7b759c3a added nav constructors with integration into automatic inline factoring + caching 2016-05-24 13:49:41 -04:00
Nathan Marz
b2cb9f1940 add doc for must-cache-paths 2016-05-24 08:42:23 -04:00
Nathan Marz
4f3990c239 added tests and cljs-specific fixes 2016-05-23 14:58:22 -04:00
Nathan Marz
218cbcb933 use mutable cell for must-cache-paths state for cljs compatibility 2016-05-23 10:36:52 -04:00
Nathan Marz
1e0a43c903 all tests passing for both clj and cljs 2016-05-23 10:21:43 -04:00
Nathan Marz
b156727f3c fix inline handle params for cljs, most tests passing 2016-05-23 10:01:44 -04:00
Nathan Marz
ac8119dbbe inline caching for cljs working in repl tests, tests not working for cljs yet 2016-05-23 09:23:14 -04:00
Nathan Marz
d30af6e972 cljs inline caching impl almost working 2016-05-23 08:18:49 -04:00
Nathan Marz
2071059695 revert back to using concurrenthashmap - the performance benefit is not worth the potential startup time problems with >5000 callsites 2016-05-22 09:52:37 -04:00
Nathan Marz
50b02c17f0 add case to automatically factor string for cached path if it is extended as a navigator 2016-05-22 09:25:33 -04:00
Nathan Marz
fcb5e013d4 fixed inline precompilation of inline sets in paths, fix bug leading to wrong params order during inline precompilation, change select/transform operations to be macros and move code around accordingly, rename previous versions of select/transform functions with * added 2016-05-22 08:57:53 -04:00
Nathan Marz
cdcdbbbaa4 clean up terminology – defpath -> defnav, path -> nav, fixed-pathed-path -> fixed-pathed-nav, variable-pathed-path -> variable-pathed-nav, StructurePath -> Navigator (breaking changes) 2016-05-21 15:54:07 -04:00
Nathan Marz
c567045fb5 better conditional checking of cached value 2016-05-21 10:08:50 -04:00
Nathan Marz
c2fa922717 automatically factor anonymous functions with pred, 20% more effient cache strategy, more efficient hot path, added ability with must-cache-paths to error when a path can't be cached and get detailed information why 2016-05-21 09:44:20 -04:00
Nathan Marz
d3a462aa06 initial impl working for basic use cases 2016-05-20 16:57:53 -04:00
Nathan Marz
1d77d295fa minor refactoring of ATOM and update changelog 2016-05-08 15:55:45 -04:00
Rakesh
c280b40b12 renamed atompath to ATOM 2016-05-08 23:39:14 +05:30
Rakesh
7b33c93132 Added path to navigate to atom value 2016-05-07 22:40:21 +05:30
Nathan Marz
03f6a12baa fix must select 2016-05-05 14:59:25 -04:00
Nathan Marz
3602a08e5d docstring for view 2016-05-05 14:29:20 -04:00
Nathan Marz
b4b2200377 added must navigator 2016-05-05 14:24:57 -04:00
Nathan Marz
f5c5284ae1 add docstrings to zippers 2016-04-25 17:47:10 -04:00
Nathan Marz
48ad46d5e5 add zipper/PREV 2016-04-24 16:54:07 -04:00