FDL Core Library
ASC Framing Decision List — C/C++ Reference Implementation
Loading...
Searching...
No Matches
fdl_handles.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024-present American Society Of Cinematographers
2// SPDX-License-Identifier: Apache-2.0
12#ifndef FDL_HANDLES_INTERNAL_H
13#define FDL_HANDLES_INTERNAL_H
14
15#include <jsoncons/json.hpp>
16#include <memory>
17#include <unordered_map>
18#include <vector>
19
20#include "fdl_constants.h"
21
22struct fdl_doc;
23
30 uint32_t fi_index;
32 [[nodiscard]] jsoncons::ojson* node() const;
33};
34
38 uint32_t ctx_index;
40 [[nodiscard]] jsoncons::ojson* node() const;
41};
42
46 uint32_t ct_index;
48 [[nodiscard]] jsoncons::ojson* node() const;
49};
50
52struct fdl_canvas {
54 uint32_t ctx_index;
55 uint32_t cvs_index;
57 [[nodiscard]] jsoncons::ojson* node() const;
58};
59
63 uint32_t ctx_index;
64 uint32_t cvs_index;
65 uint32_t fd_index;
67 [[nodiscard]] jsoncons::ojson* node() const;
68};
69
73 uint32_t ctx_index;
75 [[nodiscard]] jsoncons::ojson* node() const;
76};
77
81 uint32_t ctx_index;
83 [[nodiscard]] jsoncons::ojson* node() const;
84};
85
97inline uint64_t pack_key(uint32_t a, uint32_t b) {
98 return (static_cast<uint64_t>(a) << fdl::constants::kPackKey2Shift) | b;
99}
100
108inline uint64_t pack_key3(uint32_t a, uint32_t b, uint32_t c) {
109 return (static_cast<uint64_t>(a) << fdl::constants::kPackKey3HighShift) |
110 (static_cast<uint64_t>(b) << fdl::constants::kPackKey3MidShift) | c;
111}
112
124 std::vector<std::unique_ptr<fdl_context>> contexts;
125 std::vector<std::unique_ptr<fdl_canvas>> canvases;
126 std::vector<std::unique_ptr<fdl_framing_decision>> framing_decisions;
127 std::vector<std::unique_ptr<fdl_framing_intent>> framing_intents;
128 std::vector<std::unique_ptr<fdl_canvas_template>> canvas_templates;
129 std::vector<std::unique_ptr<fdl_clip_id>> clip_ids;
130 std::vector<std::unique_ptr<fdl_file_sequence>> file_sequences;
135 std::unordered_map<uint32_t, fdl_context*> ctx_by_index;
136 std::unordered_map<uint32_t, fdl_framing_intent*> fi_by_index;
137 std::unordered_map<uint32_t, fdl_canvas_template*> ct_by_index;
138 std::unordered_map<uint64_t, fdl_canvas*> cvs_by_key;
139 std::unordered_map<uint64_t, fdl_framing_decision*> fd_by_key;
140 std::unordered_map<uint32_t, fdl_clip_id*> cid_by_ctx;
141 std::unordered_map<uint32_t, fdl_file_sequence*> seq_by_ctx;
145 void clear() {
146 contexts.clear();
147 canvases.clear();
148 framing_decisions.clear();
149 framing_intents.clear();
150 canvas_templates.clear();
151 clip_ids.clear();
152 file_sequences.clear();
153 ctx_by_index.clear();
154 fi_by_index.clear();
155 ct_by_index.clear();
156 cvs_by_key.clear();
157 fd_by_key.clear();
158 cid_by_ctx.clear();
159 seq_by_ctx.clear();
160 }
161};
162
163#endif // FDL_HANDLES_INTERNAL_H
Named constants replacing magic numbers throughout the FDL core library.
uint64_t pack_key3(uint32_t a, uint32_t b, uint32_t c)
Pack three indices into a 64-bit map key (20 bits each, a in high bits).
Definition fdl_handles.h:108
uint64_t pack_key(uint32_t a, uint32_t b)
Pack two 32-bit indices into a 64-bit map key.
Definition fdl_handles.h:97
Handle to a canvas template (root-level, single index).
Definition fdl_handles.h:44
uint32_t ct_index
Index into root "canvas_templates" array.
Definition fdl_handles.h:46
fdl_doc * owner
Owning document.
Definition fdl_handles.h:45
jsoncons::ojson * node() const
Resolve handle to its JSON node.
Definition fdl_handles.cpp:78
Handle to a canvas (child of context, two-level index).
Definition fdl_handles.h:52
jsoncons::ojson * node() const
Resolve handle to its JSON node.
Definition fdl_handles.cpp:82
fdl_doc * owner
Owning document.
Definition fdl_handles.h:53
uint32_t cvs_index
Index into context's "canvases" array.
Definition fdl_handles.h:55
uint32_t ctx_index
Index into "contexts" array.
Definition fdl_handles.h:54
Handle to a clip ID (child of context, one-level index).
Definition fdl_handles.h:71
jsoncons::ojson * node() const
Resolve handle to its JSON node (context's "clip_id" object).
Definition fdl_handles.cpp:90
uint32_t ctx_index
Index into "contexts" array.
Definition fdl_handles.h:73
fdl_doc * owner
Owning document.
Definition fdl_handles.h:72
Handle to a context (root-level, single index).
Definition fdl_handles.h:36
fdl_doc * owner
Owning document.
Definition fdl_handles.h:37
jsoncons::ojson * node() const
Resolve handle to its JSON node.
Definition fdl_handles.cpp:74
uint32_t ctx_index
Index into root "contexts" array.
Definition fdl_handles.h:38
Opaque handle definition — shared across ABI translation units.
Definition fdl_doc.h:82
Handle to a file sequence (grandchild of context, via clip_id, one-level index).
Definition fdl_handles.h:79
uint32_t ctx_index
Index into "contexts" array.
Definition fdl_handles.h:81
jsoncons::ojson * node() const
Resolve handle to its JSON node (clip_id's "sequence" object).
Definition fdl_handles.cpp:94
fdl_doc * owner
Owning document.
Definition fdl_handles.h:80
Handle to a framing decision (child of canvas, three-level index).
Definition fdl_handles.h:61
uint32_t fd_index
Index into canvas's "framing_decisions" array.
Definition fdl_handles.h:65
uint32_t cvs_index
Index into context's "canvases" array.
Definition fdl_handles.h:64
jsoncons::ojson * node() const
Resolve handle to its JSON node.
Definition fdl_handles.cpp:86
uint32_t ctx_index
Index into "contexts" array.
Definition fdl_handles.h:63
fdl_doc * owner
Owning document.
Definition fdl_handles.h:62
Handle to a framing intent (root-level, single index).
Definition fdl_handles.h:28
jsoncons::ojson * node() const
Resolve handle to its JSON node.
Definition fdl_handles.cpp:70
uint32_t fi_index
Index into root "framing_intents" array.
Definition fdl_handles.h:30
fdl_doc * owner
Owning document.
Definition fdl_handles.h:29
Cache container for all handle types — lives on fdl_doc.
Definition fdl_handles.h:121
std::unordered_map< uint64_t, fdl_canvas * > cvs_by_key
Canvas dedup map (packed ctx+cvs key).
Definition fdl_handles.h:138
std::unordered_map< uint32_t, fdl_canvas_template * > ct_by_index
Canvas template dedup map.
Definition fdl_handles.h:137
std::vector< std::unique_ptr< fdl_canvas_template > > canvas_templates
Canvas template handles.
Definition fdl_handles.h:128
std::vector< std::unique_ptr< fdl_file_sequence > > file_sequences
File sequence handles.
Definition fdl_handles.h:130
std::unordered_map< uint32_t, fdl_context * > ctx_by_index
Context dedup map.
Definition fdl_handles.h:135
std::vector< std::unique_ptr< fdl_canvas > > canvases
Canvas handles.
Definition fdl_handles.h:125
std::unordered_map< uint64_t, fdl_framing_decision * > fd_by_key
Framing decision dedup map (packed key).
Definition fdl_handles.h:139
std::vector< std::unique_ptr< fdl_clip_id > > clip_ids
Clip ID handles.
Definition fdl_handles.h:129
std::unordered_map< uint32_t, fdl_framing_intent * > fi_by_index
Framing intent dedup map.
Definition fdl_handles.h:136
std::unordered_map< uint32_t, fdl_clip_id * > cid_by_ctx
Clip ID dedup map (by context index).
Definition fdl_handles.h:140
void clear()
Clear all handles and deduplication maps.
Definition fdl_handles.h:145
std::vector< std::unique_ptr< fdl_context > > contexts
Context handles.
Definition fdl_handles.h:124
std::vector< std::unique_ptr< fdl_framing_decision > > framing_decisions
Framing decision handles.
Definition fdl_handles.h:126
std::unordered_map< uint32_t, fdl_file_sequence * > seq_by_ctx
File sequence dedup map (by context index).
Definition fdl_handles.h:141
std::vector< std::unique_ptr< fdl_framing_intent > > framing_intents
Framing intent handles.
Definition fdl_handles.h:127