Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
transaction.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <memory>
7#include <optional>
8#include <span>
9#include <vector>
10
11namespace pulp::timeline {
12
16
18enum class DirtyFlags : std::uint16_t {
19 None = 0,
20 Structure = 1 << 0,
21 Timing = 1 << 1,
22 Content = 1 << 2,
23 Notes = 1 << 3,
24 Added = 1 << 4,
25 Removed = 1 << 5,
26 Automation = 1 << 6,
27 Take = 1 << 7,
28 Freeze = 1 << 8,
29 Marker = 1 << 9,
30 // Sequence-owned context changed. The item names the sequence and owns no
31 // track, so a consumer that maps dirty items to tracks finds nothing to
32 // recompile here — which is correct, because the readers are not derivable
33 // from the item. DirtySet::contexts() names the kind that changed; the
34 // compiler resolves the readers through its subscription reverse index.
35 Context = 1 << 10,
36 Mixer = 1 << 11,
37};
38
40constexpr DirtyFlags operator|(DirtyFlags lhs, DirtyFlags rhs) noexcept {
41 return static_cast<DirtyFlags>(static_cast<std::uint16_t>(lhs) |
42 static_cast<std::uint16_t>(rhs));
43}
44
56
69
74class DirtySet {
75 public:
80 explicit DirtySet(std::vector<DirtyItem> items = {},
81 std::vector<DirtyContext> contexts = {});
83 std::span<const DirtyItem> items() const noexcept {
84 return items_;
85 }
86
87 std::span<const DirtyContext> contexts() const noexcept {
88 return contexts_;
89 }
90
91 std::size_t retained_size() const noexcept;
92
93 private:
94 std::vector<DirtyItem> items_;
95 std::vector<DirtyContext> contexts_;
96};
97
149
170
180
188 std::shared_ptr<const Project> snapshot;
191 std::vector<CommandId> applied_commands;
192 std::shared_ptr<const Project> predecessor_snapshot;
193};
194
203reduce_transaction(const Project& project, const Transaction& transaction);
204
206
207} // namespace pulp::timeline
Result<T, E> — either holds a T or an E, never both.
Definition result.hpp:76
Owned canonical collection of incremental invalidations.
Definition transaction.hpp:74
std::span< const DirtyItem > items() const noexcept
Returns canonical item invalidations in stable sorted order.
Definition transaction.hpp:83
std::span< const DirtyContext > contexts() const noexcept
Returns unique context invalidations in stable sorted order.
Definition transaction.hpp:87
DirtySet(std::vector< DirtyItem > items={}, std::vector< DirtyContext > contexts={})
Takes ownership and canonicalizes dirty records.
std::size_t retained_size() const noexcept
Returns the owned object and vector-storage size estimate.
Immutable root of a Timeline document and its monotonic identity domain.
Definition model.hpp:1079
Immutable sample-anchored recording take referencing a project media asset.
Definition recording.hpp:29
CompileContextKind
A kind of timeline context a renderer's compile hook may read beyond its own clip's content.
Definition compile_context.hpp:46
@ ChordScale
Definition compile_context.hpp:47
@ TargetMissing
Definition note_transform.hpp:57
@ WrongTargetKind
Definition note_transform.hpp:58
runtime::Result< ReducedTransaction, TransactionError > reduce_transaction(const Project &project, const Transaction &transaction)
Purely applies a transaction to a project without session publication.
DirtyFlags
Bitmask describing which interpretation of an item became stale.
Definition transaction.hpp:18
ConflictCode
Stable reason a transaction cannot be reduced or committed.
Definition transaction.hpp:103
constexpr DirtyFlags operator|(DirtyFlags lhs, DirtyFlags rhs) noexcept
Combines independent dirty reasons.
Definition transaction.hpp:40
@ Freeze
Definition transaction.hpp:28
@ None
Definition transaction.hpp:19
@ Mixer
Definition transaction.hpp:36
@ Removed
Definition transaction.hpp:25
@ Context
Definition transaction.hpp:35
@ Structure
Definition transaction.hpp:20
@ Added
Definition transaction.hpp:24
@ Notes
Definition transaction.hpp:23
@ InactiveTarget
Definition transaction.hpp:112
@ NothingToUndo
Definition transaction.hpp:119
@ ExpectedValueMismatch
Definition transaction.hpp:115
@ WriterLimit
Definition transaction.hpp:121
@ CommandIdCollision
Definition transaction.hpp:108
@ InvalidIdentifier
Definition transaction.hpp:104
@ TransactionIdCollision
Definition transaction.hpp:107
@ SequenceExhausted
Definition transaction.hpp:122
@ UndoFull
Definition transaction.hpp:118
@ CapabilityDenied
The submitting writer's capability mask does not permit the class of one named command.
Definition transaction.hpp:143
@ NothingToRedo
Definition transaction.hpp:120
@ JournalFull
Definition transaction.hpp:117
@ CheckpointMismatch
A replay checkpoint matched the journal base revision but is not the document the journal was built o...
Definition transaction.hpp:129
@ AlreadyAppliedResultExpired
Definition transaction.hpp:109
@ Unspecified
Never produced deliberately.
Definition transaction.hpp:139
@ JournalDurability
Definition transaction.hpp:124
@ ReplayDivergence
Replaying a recorded entry did not reproduce what was recorded: the entry no longer reduces,...
Definition transaction.hpp:136
@ ParentMismatch
Definition transaction.hpp:114
@ GestureState
Definition transaction.hpp:113
@ ModelInvariant
Definition transaction.hpp:123
@ WriterQuotaExhausted
The transaction's retained size exceeds the writer's per-transaction budget, or would carry its cumul...
Definition transaction.hpp:147
@ IdentityNotAvailable
Definition transaction.hpp:116
@ StaleRevision
Definition transaction.hpp:106
@ EmptyTransaction
Definition transaction.hpp:105
@ Automation
Non-performed control of parameter values on a track: automation lanes, modulation sources,...
Definition document_session.hpp:57
@ Timing
How the document is interpreted musically: the project tempo and meter maps, and the tuning a project...
Definition document_session.hpp:74
@ Unspecified
Definition model.hpp:508
@ Marker
Definition model.hpp:961
@ None
Definition clip.hpp:176
@ Content
Definition schema_registry.hpp:23
Definition program_compiler.hpp:18
STL namespace.
Writer-scoped, monotonically assigned command identity.
Definition command.hpp:32
Immutable state published by a successful session commit.
Definition transaction.hpp:187
std::vector< CommandId > applied_commands
Definition transaction.hpp:191
std::shared_ptr< const Project > snapshot
Definition transaction.hpp:188
std::shared_ptr< const Project > predecessor_snapshot
Definition transaction.hpp:192
DirtySet dirty
Definition transaction.hpp:190
DocumentRevision revision
Definition transaction.hpp:189
One sequence-owned context kind a transaction changed.
Definition transaction.hpp:64
constexpr auto operator<=>(const DirtyContext &) const =default
ItemId owner_sequence
Definition transaction.hpp:65
CompileContextKind kind
Definition transaction.hpp:66
Canonical invalidation record for one item and its owning location.
Definition transaction.hpp:49
ItemId owner_track
Definition transaction.hpp:51
ItemId item
Definition transaction.hpp:50
constexpr auto operator<=>(const DirtyItem &) const =default
ItemId owner_sequence
Definition transaction.hpp:52
DirtyFlags flags
Definition transaction.hpp:53
Monotonic document snapshot revision used for optimistic admission.
Definition command.hpp:54
Nonzero monotonic identity for a Timeline-owned object.
Definition item_id.hpp:19
Pure reduction result before revision publication.
Definition transaction.hpp:175
Project project
Definition transaction.hpp:176
DirtySet dirty
Definition transaction.hpp:177
std::vector< Command > inverses
Definition transaction.hpp:178
Structured transaction rejection.
Definition transaction.hpp:160
ConflictCode code
Definition transaction.hpp:161
TransactionId transaction
Definition transaction.hpp:162
ItemId item
Definition transaction.hpp:164
DocumentRevision current_revision
Definition transaction.hpp:167
DocumentRevision expected_revision
Definition transaction.hpp:166
CommandId command
Definition transaction.hpp:163
ItemId related_item
Definition transaction.hpp:165
std::optional< ModelError > model_error
Definition transaction.hpp:168
Writer-scoped, monotonically assigned transaction identity.
Definition command.hpp:43
Atomically admitted ordered command batch.
Definition command.hpp:824