tin  1.5.9
policies.h
Go to the documentation of this file.
1 // Copyright (c) 2026 Tinverse LLC. All rights reserved.
2 // SPDX-License-Identifier: LicenseRef-Tinverse-Commercial
3 
10 
11 #pragma once
12 
13 #include <array>
14 #include <cstddef>
15 #include <cstdint>
16 
17 #include "tsm/core_algorithms.h"
18 #include "tsm/logging.h"
19 #include "tsm/transition.h"
20 
21 namespace tsm::policy {
22 
30  static constexpr const char* name = "leaf-first";
31 };
32 
33 struct StaticChoice {
34  static constexpr const char* name = "static-choice";
35 };
36 
37 struct NoForkJoin {
38  static constexpr const char* name = "no-fork-join";
39 };
40 
41 template<std::size_t StateCount>
43  std::array<std::uint16_t, StateCount> state{};
44 
45  constexpr ShallowHistoryStorage() { clear(); }
46 
47  constexpr void clear() { state.fill(tsm::core::npos); }
48 
49  [[nodiscard]] constexpr std::uint16_t get(std::uint16_t parent) const {
50  return parent < state.size() ? state[parent] : tsm::core::npos;
51  }
52 
53  constexpr void set(std::uint16_t parent, std::uint16_t child) {
54  if (parent < state.size()) {
55  state[parent] = child;
56  }
57  }
58 };
59 
66  static constexpr const char* name = "shallow-history";
67 
68  template<std::size_t StateCount>
70 };
71 
72 template<std::size_t Capacity>
74  static constexpr const char* name = "static-deferred-events";
75  static constexpr std::size_t capacity = Capacity;
76 };
77 
79  static constexpr const char* name = "runtime-transition-sequences";
80  static constexpr bool enabled = false;
81 };
82 
84  static constexpr const char* name = "precomputed-transition-sequences";
85  static constexpr bool enabled = true;
86 };
87 
95 };
96 
97 struct DirectRuntime {
98  static constexpr const char* name = "direct-runtime";
99 };
100 
101 template<typename SemanticsPolicy = DeterministicSemantics,
102  typename RuntimePolicy = DirectRuntime,
103  typename LoggingPolicy = NoLogging>
110  using semantics = SemanticsPolicy;
111  using runtime = RuntimePolicy;
112  using logging = LoggingPolicy;
113 };
114 
115 } // namespace tsm::policy
constexpr hierarchy algorithms used by the HSM runtime.
Logging policy vocabulary for state-machine observations.
constexpr std::uint16_t npos
Definition: core_algorithms.h:31
Definition: logging.h:54
Definition: policies.h:109
LoggingPolicy logging
Definition: policies.h:112
RuntimePolicy runtime
Definition: policies.h:111
SemanticsPolicy semantics
Definition: policies.h:110
Definition: policies.h:88
Definition: policies.h:97
static constexpr const char * name
Definition: policies.h:98
Definition: policies.h:29
static constexpr const char * name
Definition: policies.h:30
Definition: policies.h:37
static constexpr const char * name
Definition: policies.h:38
Definition: logging.h:60
static constexpr bool enabled
Definition: policies.h:85
static constexpr const char * name
Definition: policies.h:84
static constexpr const char * name
Definition: policies.h:79
static constexpr bool enabled
Definition: policies.h:80
Definition: policies.h:42
constexpr void set(std::uint16_t parent, std::uint16_t child)
Definition: policies.h:53
constexpr void clear()
Definition: policies.h:47
constexpr ShallowHistoryStorage()
Definition: policies.h:45
constexpr std::uint16_t get(std::uint16_t parent) const
Definition: policies.h:49
std::array< std::uint16_t, StateCount > state
Definition: policies.h:43
Definition: policies.h:65
static constexpr const char * name
Definition: policies.h:66
Definition: policies.h:33
static constexpr const char * name
Definition: policies.h:34
Definition: policies.h:73
static constexpr const char * name
Definition: policies.h:74
static constexpr std::size_t capacity
Definition: policies.h:75
Authoring vocabulary for transitions, pseudostates, and synchronization.