Icarus
Vehicle Simulation as a Transformable Computational Graph, built on Vulcan and Janus
Loading...
Searching...
No Matches
Signal.hpp
Go to the documentation of this file.
1#pragma once
2
13
14#include <vulcan/io/Signal.hpp>
15
16#include <cstdint>
17#include <limits>
18#include <string>
19
20namespace icarus {
21
22// =============================================================================
23// Re-export Vulcan Signal Types
24// =============================================================================
25
27using SignalType = vulcan::io::SignalType;
28
30using SignalLifecycle = vulcan::io::SignalLifecycle;
31
32// =============================================================================
33// TypeTraits - Compile-time type ID mapping
34// =============================================================================
35
40template <typename T> struct TypeTraits {
41 static_assert(sizeof(T) == 0, "TypeTraits not specialized for this type. "
42 "Supported types: double, int32_t, int64_t");
43};
44
48template <> struct TypeTraits<double> {
49 static constexpr SignalType type_id = SignalType::Double;
50 static constexpr const char *name = "Double";
51};
52
56template <> struct TypeTraits<int32_t> {
57 static constexpr SignalType type_id = SignalType::Int32;
58 static constexpr const char *name = "Int32";
59};
60
64template <> struct TypeTraits<int64_t> {
65 static constexpr SignalType type_id = SignalType::Int64;
66 static constexpr const char *name = "Int64";
67};
68
69// =============================================================================
70// SignalKind - Interface classification (Phase 2.4)
71// =============================================================================
72
82
86inline const char *to_string(SignalKind kind) {
87 switch (kind) {
89 return "Output";
91 return "Input";
93 return "Parameter";
95 return "Config";
96 default:
97 return "Unknown";
98 }
99}
100
101} // namespace icarus
102
103// Include Icarus types for SymbolicScalar specialization
105
106namespace icarus {
107
114template <> struct TypeTraits<SymbolicScalar> {
115 static constexpr SignalType type_id = SignalType::Double;
116 static constexpr const char *name = "SymbolicDouble";
117};
118
119// =============================================================================
120// SignalDescriptor (extends Vulcan's with Icarus-specific fields)
121// =============================================================================
122
137 // Core fields (compatible with Vulcan's SignalDescriptor)
138 std::string name;
141 std::string unit;
142 std::string semantic;
143
144 // Icarus extensions
145 std::string description;
146 std::string owner_component;
147 void *data_ptr = nullptr;
148
149 // Phase 2.4: Interface classification
151 std::string wired_to;
152
153 // Simulation metadata
154 double min_value = -std::numeric_limits<double>::infinity();
155 double max_value = std::numeric_limits<double>::infinity();
156 bool is_optimizable = true;
157
158 // Phase 6: Unified state model
159 bool is_integrable = false;
160 std::string derivative_signal;
161 std::string integrated_signal;
162
164 [[nodiscard]] constexpr size_t size_bytes() const { return 8; }
165};
166
167} // namespace icarus
Core type definitions, concepts, and configuration for Icarus.
Definition AggregationTypes.hpp:13
const char * to_string(SignalKind kind)
Convert SignalKind to string.
Definition Signal.hpp:86
vulcan::io::SignalType SignalType
Signal data type (re-exported from Vulcan for consistency).
Definition Signal.hpp:27
vulcan::io::SignalLifecycle SignalLifecycle
Signal lifecycle (re-exported from Vulcan for consistency).
Definition Signal.hpp:30
SignalKind
Classification of signal types in the component interface.
Definition Signal.hpp:76
@ Output
Dynamic output signal (Scalar, Vec3, etc.).
Definition Signal.hpp:77
@ Input
Input port (wired to an output).
Definition Signal.hpp:78
@ Parameter
Scalar-typed parameter (optimizable).
Definition Signal.hpp:79
@ Config
Discrete config (int/bool/enum, not optimizable).
Definition Signal.hpp:80
Descriptor for a signal on the backplane.
Definition Signal.hpp:136
double max_value
Definition Signal.hpp:155
std::string semantic
Optional semantic hint: "boolean", "enum".
Definition Signal.hpp:142
double min_value
Definition Signal.hpp:154
std::string wired_to
For inputs: source signal name.
Definition Signal.hpp:151
constexpr size_t size_bytes() const
Get padded size in bytes (always 8 for wire format alignment, matching Vulcan).
Definition Signal.hpp:164
std::string description
Human-readable description.
Definition Signal.hpp:145
std::string integrated_signal
For derivatives: name of paired value signal.
Definition Signal.hpp:161
SignalKind kind
Signal classification.
Definition Signal.hpp:150
SignalLifecycle lifecycle
Static or Dynamic.
Definition Signal.hpp:140
SignalType type
Data type (Double, Int32, Int64).
Definition Signal.hpp:139
std::string unit
Physical unit: "N", "m/s", "rad".
Definition Signal.hpp:141
std::string owner_component
Component that registered this signal.
Definition Signal.hpp:146
void * data_ptr
Pointer to storage (for pointer-bind pattern).
Definition Signal.hpp:147
std::string name
Full path: "Falcon9.Propulsion.Thrust".
Definition Signal.hpp:138
bool is_optimizable
False for Config kind.
Definition Signal.hpp:156
std::string derivative_signal
For states: name of paired derivative signal.
Definition Signal.hpp:160
bool is_integrable
True for state values that need integration.
Definition Signal.hpp:159
static constexpr SignalType type_id
Definition Signal.hpp:115
static constexpr const char * name
Definition Signal.hpp:116
static constexpr const char * name
Definition Signal.hpp:50
static constexpr SignalType type_id
Definition Signal.hpp:49
static constexpr SignalType type_id
Definition Signal.hpp:57
static constexpr const char * name
Definition Signal.hpp:58
static constexpr const char * name
Definition Signal.hpp:66
static constexpr SignalType type_id
Definition Signal.hpp:65
Primary template for TypeTraits (generates compile error if not specialized).
Definition Signal.hpp:40