Grigorii Kirgizov
fa380c9f36
Fix failing build of coderules because of changed interfaces
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
3e50f47f73
Add MatchJournal.Index for additional queries and operations involving ordering of occurrences
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
eec343f902
Add stub code for handling case of adding headless ('at-start') rules
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
c0cb26d598
Add two more tests for addition phase. Handle one additional case and make one test pass.
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
ddb67690f4
Add partial sketch of removal phase of incremental algorithm.
...
For that: Extend DispatchingFront and RuleMatcherImpl interface with
'forget' methods which completely drops related matches from matchers' state;
Extend MatchJournal & Chunk interfaces with helper methods.
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
5b500340e5
Make StoreAwareJournal a pure interface, move delegated inheritance to StoreAwareJournalImpl (hide journal)
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
71eac08775
Move replayOccurrences back to MatchJournal again, fix tests
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
8d615852c6
Remove Controller from Occurrence and instead pass a new one each time through OccurrenceObserver
...
It caused a situation when on the very next incremental evaluation session
occurrences carried a stale Controller along with all the state from previous session.
As a result, incorrect logic of program evaluation.
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
4e60ef9909
Add tests for incremental additions (one fails for now). Don't log reactivations in journal.
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
95b5f97869
Add equals() to MatchJournal.Pos. Handle corner case in 'replay', when it happens to the same pos. Same for 'reset'.
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
e33df7aac2
Hide mutable collection of occurrences in Chunk and add 'principleConstraint' fun to its interface
2019-06-12 13:28:06 +03:00
Grigorii Kirgizov
97d36d8d1f
Fix corner case in algo stage. Add test for it.
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
6a3aad364c
Add SessionToken to preserve eval state between sessions. Add IncrementalProgramSpec. Add impl of one algo stage, in ProcessingStateImpl.
...
SessionToken includes MatchJournal.View and a state of all RuleMatchers.
IncrementalProgramSpec specifies information needed for incremental evaluation.
In essence, it answers on queries of type 'isPrincipal' for Rules and Constraints.
It decouples specific incremental info from entities, allows to inject it easily in tests.
Its presence also enables incremental version of evaluation, in EvaluationSessionImpl.
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
6932e99774
Enable tracking justification in Controller for principal constraints' occ-s
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
76194a62ae
Refactor tests to make them more readable. Remove unsafe cast from journal's reset.
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
11bec29410
Use journal for aborting execution of alternative branches, fix 'reset' method
...
All tests for Controller pass, but one test from StoreAwareJournal fails, mute for now
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
0fb54fc5ba
Add invariant to Journal that it always has at least initial chunk, with EmptyRuleMatch
...
Also slightly fix tests and add tracking (i.e. using journal) to ProcessingStateImpl
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
225bd9861e
Separate concerns b/w ProcessingStateImpl and StateAwareJournal, construct in a new way
...
ProcessingStateImpl has only processing logic and inherits frame stack logic from StateAwareJournal
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
77bc7538a4
Prepare before merging StoreAwareJournal & ProcessingStateImpl: extract FrameStack from ProcState, inherit StoreAwareJ from MatchJ by delegation
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
799b57c74e
minor: remove usages of rule.tag() in tests
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
0cbc32d4a0
Get rid off nullability of Justs
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
52fd54afce
Hide use of TIntSet from trove behind typealias; one usage in ConstraintOccurrence.java is left
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
f8b7ac1d50
Few renames in MatchJournal; throw exceptions at invalid iteration states
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
d3883effaf
Extract frame-independent logic from MatchHistory to its base class MatchJournal
...
Small changes: rename MatchHistory -> StateAwareJournal; use referential
eq when iterating through chunks; provide only Pos, not Chunk from
current()/currentPos(); fix tests according to all this.
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
e5942d2c77
Fix MatchHistory tests: fix impl of storeView, taking into account current pos in history (not all of it)
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
c4309084c5
Refactor: remove match-logic from StateFrame (now it's only about Observers), mvoe it to ProcessingState
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
b2f65e1510
Implement storeView() method to MatchHistory, remove it from ProcessingImpl (but not its single usage yet) and stored occurrences from StateFrame
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
cbddd108bb
Subst FrameStack in MatchHistory for ProcessingImpl
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
cd5ad91caf
minor: fix type in 'logOccurence' method
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
c322cf5c70
Add test with more complex and representative manipulation of MatchHistory
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
a360abc59e
Add MatchHistory.View class (snapshot of history), refine one test, fix mistake in history.reset()
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
612f0a212c
Refine MatchHistory impl, extract interface for tests, add several tests.
2019-06-12 13:28:05 +03:00
Grigorii Kirgizov
9a7838fdc7
Add initial sketch of MatchHistory; add justifications to ConstraintOccurence interface
2019-06-12 13:28:05 +03:00
Fedor Isakov
eba51e8a9b
Bump up conreactor's version to 0.9.10 in anticipation of new features.
2019-06-04 18:24:31 +02:00
Fedor Isakov
c051542440
Replace usages of java.util.HashMap with persistent map to optimize
...
memory allocation.
2019-05-17 18:01:34 +02:00
Fedor Isakov
0e02bab768
Replace tag() method in rule with uniqueTag() returning Object. This
...
allows for further memory optimization.
2019-05-17 17:10:52 +02:00
Fedor Isakov
0697437ec7
Optimize code for fewer transient memory allocations.
2019-05-17 17:10:20 +02:00
Fedor Isakov
658963903d
Refactor controller: extract component for managing dispatching front,
...
drop Store, introduce ProcessingState and StateFrame.
ProcessingState class to represent current state, including the
dispatching front and all the logical observers.
StateFrame is a persistent class that reacts to activated constraint
and launches processing via Controller.
Breaking change: the frames correspond to an activated constraint occurrence,
and not to a triggered rule match as it has been the case before.
2019-05-16 12:35:52 +02:00
Fedor Isakov
11a9505ee9
Decompose controller's processing of constraints for better separation of concerns.
...
Restructure the code in controller to enable being called from an
external component.
2019-05-14 11:38:19 +02:00
Fedor Isakov
bfc4b641bb
Refactor constraint occurrence to depend on controller directly.
...
Drop creating of a frame stack from a store view.
2019-05-13 10:48:10 +02:00
Fedor Isakov
b482de1ce5
Rename reactor classes: Handler -> RulesList, IdWrapper -> Id
2019-05-10 12:00:02 +02:00
Fedor Isakov
eb5b38384f
Rename Handler class in reactor API to RulesList.
2019-05-09 17:30:14 +02:00
Fedor Isakov
d70bc2509d
Rename for better readability: fringe -> front, matchRule -> ruleMatch.
2019-05-09 17:30:14 +02:00
Fedor Isakov
915bc1442a
Update project structure after API pom has been deleted.
2019-05-09 14:22:23 +02:00
Fedor Isakov
fa2476fabb
Drop deprecated stuff from conreactor API.
2019-05-05 14:30:19 +02:00
Fedor Isakov
7e7dba455e
Move Kotlin compiler to "process-source" phase of Maven build.
2019-05-05 14:29:51 +02:00
Fedor Isakov
cc2774d66d
Refactorings in conreactor: better separation of concerns, cleaner interfaces.
...
Introduce Supervisor, extract evaluation-related stuff from Program, merge with EvaluationFeedbackHandler.
Move implementation of EvaluationFeedback to internal API, reduce number of public interfaces.
Cleaner interface for reporting feedback.
2019-05-05 13:52:26 +02:00
Fedor Isakov
09ca1f1236
Fix the Store implementation and the test harness to support incremental
...
program launch.
2019-05-03 22:03:17 +02:00
Fedor Isakov
59b6fb09fe
Rename some API interfaces to better reflect the intent.
2019-05-02 14:46:58 +02:00
Fedor Isakov
e270655a7f
Drop deprecated stuff in reactor.
2019-05-02 14:46:57 +02:00