GCC Code Coverage Report


ernie/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
411 / 527
78.0%
Branches:
173 / 467
37.0%
Functions:
97 / 99, 3 excl
98.0%

scene/view.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 /// @file view.h
3 /// @brief Typed views of prims, with accessors generated from their schemas' declarations.
4 #pragma once
5
6 #include "ernie/export.h"
7 #include "ernie/scene/convert.h"
8 #include "ernie/scene/scene.h"
9 #include "ernie/scene/schema.h"
10
11 #include <algorithm>
12 #include <stdexcept>
13 #include <string>
14 #include <string_view>
15 #include <type_traits>
16 #include <vector>
17
18 namespace ernie {
19
20 /// The column element a declared type is stored as: itself, unless listed below.
21 template <typename T> struct StoredAs {
22 using type = T;
23 };
24 template <> struct StoredAs<bool> {
25 using type = std::uint8_t;
26 };
27 template <> struct StoredAs<int> {
28 using type = std::int32_t;
29 };
30 template <> struct StoredAs<std::string> {
31 using type = Token;
32 };
33 template <> struct StoredAs<Path> {
34 using type = Target;
35 };
36 template <> struct StoredAs<std::vector<Path>> {
37 using type = std::vector<Target>;
38 };
39 template <> struct StoredAs<std::vector<std::string>> {
40 using type = std::vector<Token>;
41 };
42
43 /// @brief How a declared type is stored in a column and read back.
44 template <typename T> struct AttributeTraits {
45 using Stored = typename StoredAs<T>::type;
46 using Result = T;
47
48 87 static T Load(const PathTable& paths, const Stored& stored) {
49
9/18
ernie::AttributeTraits<bool>::Load(ernie::PathTable const&, unsigned char const&):
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
ernie::AttributeTraits<double>::Load(ernie::PathTable const&, double const&):
✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
ernie::AttributeTraits<ernie::Path>::Load(ernie::PathTable const&, ernie::Target const&):
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Load(ernie::PathTable const&, glm::vec<2, double, (glm::qualifier)0> const&):
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
ernie::AttributeTraits<glm::vec<3, double, (glm::qualifier)0> >::Load(ernie::PathTable const&, glm::vec<3, double, (glm::qualifier)0> const&):
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
ernie::AttributeTraits<int>::Load(ernie::PathTable const&, int const&):
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Load(ernie::PathTable const&, unsigned int const&):
✓ Branch 2 taken 16 times.
✗ Branch 3 not taken.
ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Load(ernie::PathTable const&, std::vector<ernie::Target, std::allocator<ernie::Target> > const&):
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
ernie::AttributeTraits<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::Load(ernie::PathTable const&, std::vector<unsigned int, std::allocator<unsigned int> > const&):
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
192 return *ToValue(paths, stored).template Get<T>();
50 }
51
7/14
✓ Branch 1 taken 528 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4511 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 891 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 992 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1257 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 878 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 146 times.
✗ Branch 20 not taken.
11243 static Value Save(const T& value) {
52
5/12
<unknown function 48>:
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
<unknown function 51>:
✓ Branch 1 taken 7 times.
✓ Branch 2 taken 1 time.
ernie::AttributeTraits<double>::Load(ernie::PathTable const&, double const&):
✓ Branch 1 taken 995 times.
✓ Branch 2 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Load(ernie::PathTable const&, unsigned int const&):
✗ Branch 1 not taken.
✗ Branch 2 not taken.
25818 return Value(value);
53 }
54 31546 static std::vector<std::string_view> Options() {
55 31546 return {};
56 }
57 };
58
59 template <typename E> struct AttributeTraits<Choice<E>> {
60 using Stored = Token;
61 using Result = E;
62
63 4 static E Load(const PathTable& paths, Token token) {
64 4 const auto& tokens = ChoiceTokens<E>::kTokens;
65 4 const auto found = std::ranges::find(tokens, paths.Names().Text(token));
66
2/4
ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Load(ernie::PathTable const&, unsigned int):
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Load(ernie::PathTable const&, unsigned int):
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
4 return static_cast<E>(found != tokens.end() ? found - tokens.begin() : 0);
67 }
68 1030 static Value Save(E value) {
69 2060 return std::string(ChoiceTokens<E>::kTokens[static_cast<std::size_t>(value)]);
70 }
71 1023 static std::vector<std::string_view> Options() {
72 1023 return {ChoiceTokens<E>::kTokens.begin(), ChoiceTokens<E>::kTokens.end()};
73 }
74 };
75
76 /// Arrays: read as the authored tensor, an empty one when unauthored, and written by
77 /// `Scene::Write`.
78 template <> struct AttributeTraits<Tensor> {
79 using Stored = Tensor;
80 using Result = Tensor;
81
82 7 static Tensor Load(const PathTable&, const Tensor& stored) {
83 7 return stored;
84 }
85 6570 static Value Save(const Tensor&) {
86 6570 return Value();
87 }
88 6570 static std::vector<std::string_view> Options() {
89 6570 return {};
90 }
91 };
92
93 /// @brief An attribute declaration from a schema row: its column type, fallback and metadata.
94 template <typename T, typename Fallback>
95 44546 AttributeDef DeclareAttribute(std::string_view name, const Fallback& fallback, AttributeMeta meta) {
96 using Traits = AttributeTraits<T>;
97
31/58
ernie::AttributeDef ernie::DeclareAttribute<bool, bool>(std::basic_string_view<char, std::char_traits<char> >, bool const&, ernie::AttributeMeta):
✓ Branch 0 taken 2191 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<double, double>(std::basic_string_view<char, std::char_traits<char> >, double const&, ernie::AttributeMeta):
✓ Branch 0 taken 16064 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<ernie::Choice<ernie::Axis>, ernie::Axis>(std::basic_string_view<char, std::char_traits<char> >, ernie::Axis const&, ernie::AttributeMeta):
✓ Branch 0 taken 585 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<ernie::Choice<ernie::ExpansionRule>, ernie::ExpansionRule>(std::basic_string_view<char, std::char_traits<char> >, ernie::ExpansionRule const&, ernie::AttributeMeta):
✓ Branch 0 taken 146 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<ernie::Choice<ernie::PulseTrigger>, ernie::PulseTrigger>(std::basic_string_view<char, std::char_traits<char> >, ernie::PulseTrigger const&, ernie::AttributeMeta):
✓ Branch 0 taken 146 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<ernie::Choice<ernie::QuaternionOrder>, ernie::QuaternionOrder>(std::basic_string_view<char, std::char_traits<char> >, ernie::QuaternionOrder const&, ernie::AttributeMeta):
✓ Branch 0 taken 146 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<ernie::Path, ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::Path const&, ernie::AttributeMeta):
✓ Branch 0 taken 584 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<ernie::Tensor, ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::Tensor const&, ernie::AttributeMeta):
✓ Branch 0 taken 6570 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<glm::vec<2, double, (glm::qualifier)0>, glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, glm::vec<2, double, (glm::qualifier)0> const&, ernie::AttributeMeta):
✓ Branch 0 taken 1314 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<glm::vec<3, double, (glm::qualifier)0>, glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, glm::vec<3, double, (glm::qualifier)0> const&, ernie::AttributeMeta):
✓ Branch 0 taken 1023 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<glm::vec<4, double, (glm::qualifier)0>, glm::vec<4, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, glm::vec<4, double, (glm::qualifier)0> const&, ernie::AttributeMeta):
✓ Branch 0 taken 146 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<int, int>(std::basic_string_view<char, std::char_traits<char> >, int const&, ernie::AttributeMeta):
✓ Branch 0 taken 3068 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [10]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [10], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 586 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [12]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [12], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 585 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [13]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [13], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 438 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [14]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [14], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 146 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [15]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [15], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 146 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [19]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [19], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 146 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [1]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [1], ernie::AttributeMeta):
✓ Branch 0 taken 3650 times.
✓ Branch 1 taken 292 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [3]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [3], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 146 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [4]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [4], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [5]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [5], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 876 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [6]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [6], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 584 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [7]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [7], ernie::AttributeMeta):
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 584 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [8]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [8], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 294 times.
ernie::AttributeDef ernie::DeclareAttribute<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char [9]>(std::basic_string_view<char, std::char_traits<char> >, char const (&) [9], ernie::AttributeMeta):
✗ Branch 0 not taken.
✓ Branch 1 taken 292 times.
ernie::AttributeDef ernie::DeclareAttribute<std::vector<ernie::Path, std::allocator<ernie::Path> >, std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, std::vector<ernie::Path, std::allocator<ernie::Path> > const&, ernie::AttributeMeta):
✓ Branch 0 taken 1168 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<std::vector<float, std::allocator<float> >, std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, std::vector<float, std::allocator<float> > const&, ernie::AttributeMeta):
✓ Branch 0 taken 1607 times.
✗ Branch 1 not taken.
ernie::AttributeDef ernie::DeclareAttribute<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, ernie::AttributeMeta):
✓ Branch 0 taken 585 times.
✗ Branch 1 not taken.
44546 if (meta.options.empty()) {
98 39139 meta.options = Traits::Options();
99 }
100 44546 return {name, kColumnType<typename Traits::Stored>, Traits::Save(fallback), std::move(meta)};
101 53749 }
102
103 /// @brief A prim seen through its schema: what generated accessors read and write.
104 2595 class ERNIE_API SchemaView {
105 public:
106 758 PrimId Id() const {
107
50/100
<unknown function 48>:
✓ Branch 1 taken 2 times.
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 1 time.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 time.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
<unknown function 51>:
✓ Branch 1 taken 1 time.
✓ Branch 1 taken 699 times.
✗ Branch 2 not taken.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 20 not taken.
ernie::AttributeTraits<double>::Load(ernie::PathTable const&, double const&):
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Save(ernie::Axis):
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Save(ernie::PulseTrigger):
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 time.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 time.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 time.
✗ Branch 26 not taken.
✓ Branch 28 taken 1 time.
✗ Branch 29 not taken.
✓ Branch 31 taken 1 time.
✗ Branch 32 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
✓ Branch 37 taken 1 time.
✗ Branch 38 not taken.
✓ Branch 40 taken 1 time.
✗ Branch 41 not taken.
✓ Branch 43 taken 1 time.
✗ Branch 44 not taken.
✓ Branch 46 taken 1 time.
✗ Branch 47 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Save(ernie::QuaternionOrder):
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 14 not taken.
758 return prim_;
108 }
109 3 Path GetPath() const {
110
3/6
<unknown function 109>:
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Save(ernie::PulseTrigger):
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
3 return scene_->PrimPath(prim_);
111 }
112 const Scene& GetScene() const {
113 return *scene_;
114 }
115 1 const SchemaDef& Schema() const {
116
1/2
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
1 return *schema_;
117 }
118
119 /// The instance name of a multiple-apply API schema's view; empty otherwise.
120 std::string_view Instance() const {
121 return instance_;
122 }
123
124 protected:
125 /// @throws std::invalid_argument if the prim is missing, is not of `schema`'s type or lacks
126 /// the applied API schema.
127 SchemaView(const Scene& scene, const Path& path, const SchemaDef& schema,
128 std::string_view instance = {});
129 SchemaView(Scene& scene, const Path& path, const SchemaDef& schema,
130 std::string_view instance = {});
131
132 /// Calls `use` with a declared attribute's name, its instance's for a multiple-apply schema.
133 1202 template <typename Use> decltype(auto) Named(std::string_view declared, const Use& use) const {
134
29/54
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Has(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Has(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<bool>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<bool>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 43 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<int>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<int>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 16 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Unset(std::basic_string_view<char, std::char_traits<char> >)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Unset(std::basic_string_view<char, std::char_traits<char> >)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<bool>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<bool>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<bool>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<bool>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 996 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 0 not taken.
✓ Branch 1 taken 1 time.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::PulseTrigger> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::PulseTrigger> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::QuaternionOrder> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::QuaternionOrder> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 1 time.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Path>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Path>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Tensor>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Tensor>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<int>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<int>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<int>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<int>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 7 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 36 times.
✗ Branch 1 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2 times.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<float, std::allocator<float> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<float, std::allocator<float> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
1202 if (instance_.empty()) {
135 1193 return use(declared);
136 }
137
5/54
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Has(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Has(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<bool>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<bool>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<int>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<int>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Unset(std::basic_string_view<char, std::char_traits<char> >)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Unset(std::basic_string_view<char, std::char_traits<char> >)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<bool>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<bool>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<bool>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<bool>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 2 taken 1 time.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::PulseTrigger> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::PulseTrigger> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::QuaternionOrder> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::QuaternionOrder> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Path>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Path>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Tensor>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Tensor>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<int>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<int>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<int>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<int>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<float, std::allocator<float> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<float, std::allocator<float> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 2 not taken.
✗ Branch 3 not taken.
9 const std::string name = ApiName{schema_, instance_}.Attribute(declared);
138
5/52
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<bool>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<bool>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<glm::vec<3, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<int>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<int>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Read<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Read<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Unset(std::basic_string_view<char, std::char_traits<char> >)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Unset(std::basic_string_view<char, std::char_traits<char> >)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<bool>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<bool>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<bool>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<bool>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::Axis> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::Axis> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::ExpansionRule> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::ExpansionRule> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::PulseTrigger> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::PulseTrigger> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Choice<ernie::QuaternionOrder> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Choice<ernie::QuaternionOrder> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Path>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Path>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Path>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Tensor>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<ernie::Tensor>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<ernie::Tensor>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<glm::vec<2, double, (glm::qualifier)0> >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<glm::vec<2, double, (glm::qualifier)0> >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<int>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<int>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<int>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<int>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::vector<ernie::Path, std::allocator<ernie::Path> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<ernie::Path, std::allocator<ernie::Path> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
decltype(auto) ernie::SchemaView::Named<ernie::SchemaView::Write<std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<float, std::allocator<float> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}>(std::basic_string_view<char, std::char_traits<char> >, ernie::SchemaView::Write<std::vector<float, std::allocator<float> > >(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<std::vector<float, std::allocator<float> > >::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1} const&) const:
✗ Branch 1 not taken.
✗ Branch 2 not taken.
9 return use(std::string_view(name));
139 9 }
140
141 template <typename T>
142 98 typename AttributeTraits<T>::Result Read(std::string_view declared) const {
143 80 return Named(declared, [&](std::string_view name) {
144 using Traits = AttributeTraits<T>;
145 98 const PrimStore& store = scene_->Store();
146 98 const Token token = *store.Tokens().Find(name);
147 98 const auto column = store.Read<typename Traits::Stored>(store.PrimBucket(prim_), token);
148 98 return Traits::Load(store.Paths(), column[store.PrimRow(prim_)]);
149 33 });
150 }
151 template <typename T>
152 1097 void Write(std::string_view declared, const typename AttributeTraits<T>::Result& value) {
153 1169 Named(declared, [&](std::string_view name) {
154 if constexpr (std::is_same_v<T, Tensor>) {
155
2/10
<unknown function 48>:
✗ Branch 3 not taken.
✗ Branch 4 not taken.
<unknown function 51>:
✗ Branch 3 not taken.
✗ Branch 4 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Save(ernie::QuaternionOrder):
✓ Branch 3 taken 22 times.
✓ Branch 4 taken 3 times.
ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}::operator()(std::basic_string_view<char, std::char_traits<char> >) const:
✗ Branch 3 not taken.
✗ Branch 4 not taken.
ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}::operator()[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >) const:
✗ Branch 3 not taken.
✗ Branch 4 not taken.
25 Edit().Write(prim_, name, value);
156 } else {
157
17/65
<unknown function 48>:
✗ Branch 2 not taken.
✓ Branch 3 taken 1 time.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 4 times.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
<unknown function 51>:
✓ Branch 2 taken 1 time.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 7 taken 1 time.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
✓ Branch 13 taken 31 times.
✓ Branch 14 taken 5 times.
✓ Branch 17 taken 6 times.
✓ Branch 18 taken 1 time.
ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Save(ernie::PulseTrigger):
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✓ Branch 17 taken 1 time.
✗ Branch 18 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::QuaternionOrder> >::Save(ernie::QuaternionOrder):
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 8 taken 1 time.
✗ Branch 9 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}::operator()(std::basic_string_view<char, std::char_traits<char> >) const:
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
ernie::SchemaView::Read<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}::operator()[abi:cxx11](std::basic_string_view<char, std::char_traits<char> >) const:
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
ernie::SchemaView::Write<double>(std::basic_string_view<char, std::char_traits<char> >, ernie::AttributeTraits<double>::Result const&)::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}::operator()(std::basic_string_view<char, std::char_traits<char> >) const:
✓ Branch 2 taken 993 times.
✓ Branch 3 taken 2 times.
2135 Edit().Set(prim_, name, AttributeTraits<T>::Save(value));
158 }
159 });
160 }
161 5 bool Has(std::string_view declared) const {
162 5 return Named(declared,
163
0/4
<unknown function 48>:
✗ Branch 4 not taken.
✗ Branch 5 not taken.
ernie::AttributeTraits<ernie::Choice<ernie::PulseTrigger> >::Save(ernie::PulseTrigger):
✗ Branch 3 not taken.
✗ Branch 4 not taken.
10 [&](std::string_view name) { return scene_->IsAuthored(prim_, name); });
164 }
165 2 void Unset(std::string_view declared) {
166 4 Named(declared, [&](std::string_view name) { Edit().Clear(prim_, name); });
167 }
168 Scene& Edit() const;
169
170 private:
171 const Scene* scene_ = nullptr;
172 Scene* mutable_ = nullptr;
173 PrimId prim_;
174 const SchemaDef* schema_ = nullptr;
175 std::string instance_;
176 };
177
178 /// The root of every generated accessor chain.
179
7/14
<unknown function 51>:
✓ Branch 1 taken 1 time.
✗ Branch 2 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 30 taken 1 time.
✗ Branch 31 not taken.
✓ Branch 42 taken 3 times.
✗ Branch 43 not taken.
ernie::SchemaView::Read<double>(std::basic_string_view<char, std::char_traits<char> >) const::{lambda(std::basic_string_view<char, std::char_traits<char> >)#1}::operator()(std::basic_string_view<char, std::char_traits<char> >) const:
✓ Branch 16 taken 1 time.
✗ Branch 17 not taken.
✓ Branch 22 taken 1 time.
✗ Branch 23 not taken.
✓ Branch 40 taken 1 time.
✗ Branch 41 not taken.
1307 template <typename Self, typename Base> class SchemaViewAccessors : public Base {
180 public:
181 2545 using Base::Base;
182 };
183
184 } // namespace ernie
185
186 /// For schemas that declare no attributes of their own.
187 #define ERNIE_NO_ATTRIBUTES(X)
188
189 /// The options of an attribute in `group` that is finite and 0 or more: a length, a power.
190 #define ERNIE_NONNEGATIVE(group_) .group = group_, .lower = ::ernie::AtLeast(0.0), .finite = true
191 /// The options of an attribute in `group` from 0 to 1: a fraction, a reflectance.
192 #define ERNIE_FRACTION(group_) \
193 .group = group_, .lower = ::ernie::AtLeast(0.0), .upper = ::ernie::AtMost(1.0)
194
195 #define ERNIE_ATTRIBUTE_ACCESSORS(Type, Name, usdName, fallback, ...) \
196 static constexpr std::string_view k##Name = usdName; \
197 typename ::ernie::AttributeTraits<Type>::Result Get##Name() const { \
198 return this->template Read<Type>(k##Name); \
199 } \
200 bool Has##Name() const { \
201 return this->Has(k##Name); \
202 } \
203 Self& Set##Name(const typename ::ernie::AttributeTraits<Type>::Result& value) { \
204 this->template Write<Type>(k##Name, value); \
205 return static_cast<Self&>(*this); \
206 } \
207 Self& Clear##Name() { \
208 this->Unset(k##Name); \
209 return static_cast<Self&>(*this); \
210 }
211
212 #define ERNIE_ATTRIBUTE_DECLARE(Type, Name, usdName, fallback, text, ...) \
213 ::ernie::DeclareAttribute<Type>(usdName, fallback, \
214 ::ernie::AttributeMeta{.doc = text, __VA_ARGS__}),
215
216 /// Declares `Class##Accessors`, the getters and setters of a schema's own attributes over its
217 /// base's, each returning the most derived view.
218 #define ERNIE_SCHEMA_ACCESSORS(Class, BaseClass, OWN_ATTRIBUTES) \
219 template <typename Self, typename Base> \
220 class Class##Accessors : public BaseClass##Accessors<Self, Base> { \
221 public: \
222 using BaseClass##Accessors<Self, Base>::BaseClass##Accessors; \
223 OWN_ATTRIBUTES(ERNIE_ATTRIBUTE_ACCESSORS) \
224 }
225
226 /// What every schema view class has: its type name, its documentation (the schema reference's) and
227 /// the base its registry entry derives from.
228 #define ERNIE_SCHEMA_NAMES(Class, Base, text) \
229 public: \
230 using Self = Class; \
231 using SchemaBase = Base; \
232 static constexpr std::string_view kName = #Class; \
233 static constexpr std::string_view kDoc = text; \
234 ERNIE_API static const ::ernie::SchemaDef& Definition();
235
236 /// The constructors of a typed schema view class.
237 #define ERNIE_SCHEMA_BODY(Class, Base, text) \
238 ERNIE_SCHEMA_NAMES(Class, Base, text) \
239 /** @throws std::invalid_argument if the prim does not exist or is not a `Class`. */ \
240 Class(const ::ernie::Scene& scene, const ::ernie::Path& path) \
241 : Class##Accessors<Class, Base>(scene, path, Definition()) {} \
242 Class(::ernie::Scene& scene, const ::ernie::Path& path) \
243 : Class##Accessors<Class, Base>(scene, path, Definition()) {} \
244 \
245 protected: \
246 Class(const ::ernie::Scene& scene, const ::ernie::Path& path, \
247 const ::ernie::SchemaDef& schema) \
248 : Class##Accessors<Class, Base>(scene, path, schema) {} \
249 Class(::ernie::Scene& scene, const ::ernie::Path& path, const ::ernie::SchemaDef& schema) \
250 : Class##Accessors<Class, Base>(scene, path, schema) {} \
251 \
252 public:
253
254 /// `Class::Define(scene, path)` for a concrete schema.
255 #define ERNIE_SCHEMA_DEFINE(Class) \
256 static Class Define(::ernie::Scene& scene, const ::ernie::Path& path) { \
257 scene.Define(path, Definition().name); \
258 return Class(scene, path); \
259 }
260
261 /// The constructors and `Apply` of an API schema's view; a multiple-apply schema's take its
262 /// instance name.
263 #define ERNIE_API_SCHEMA_BODY(Class, text) \
264 ERNIE_SCHEMA_NAMES(Class, ::ernie::SchemaView, text) \
265 /** @throws std::invalid_argument if the prim is missing or lacks the API schema. */ \
266 Class(const ::ernie::Scene& scene, const ::ernie::Path& path, std::string_view instance = {}) \
267 : Class##Accessors<Class, ::ernie::SchemaView>(scene, path, Definition(), instance) {} \
268 Class(::ernie::Scene& scene, const ::ernie::Path& path, std::string_view instance = {}) \
269 : Class##Accessors<Class, ::ernie::SchemaView>(scene, path, Definition(), instance) {} \
270 static Class Apply(::ernie::Scene& scene, const ::ernie::Path& path, \
271 std::string_view instance = {}) { \
272 scene.ApplyApi(scene.Require(path), ::ernie::ApiName{&Definition(), instance}.ToString()); \
273 return Class(scene, path, instance); \
274 }
275
276 /// Declares a schema's view class: an abstract base's, a prim type's with `Define`, or an applied
277 /// API schema's with `Apply`. Classes adding members of their own spell the body out instead.
278 #define ERNIE_SCHEMA(Class, Base, OWN_ATTRIBUTES, text) \
279 ERNIE_SCHEMA_ACCESSORS(Class, Base, OWN_ATTRIBUTES); \
280 class Class : public Class##Accessors<Class, Base> { \
281 ERNIE_SCHEMA_BODY(Class, Base, text) \
282 }
283 #define ERNIE_CONCRETE_SCHEMA(Class, Base, OWN_ATTRIBUTES, text) \
284 ERNIE_SCHEMA_ACCESSORS(Class, Base, OWN_ATTRIBUTES); \
285 class Class : public Class##Accessors<Class, Base> { \
286 ERNIE_SCHEMA_BODY(Class, Base, text) \
287 ERNIE_SCHEMA_DEFINE(Class) \
288 }
289 #define ERNIE_API_SCHEMA(Class, OWN_ATTRIBUTES, text) \
290 ERNIE_SCHEMA_ACCESSORS(Class, SchemaView, OWN_ATTRIBUTES); \
291 class Class : public Class##Accessors<Class, ::ernie::SchemaView> { \
292 ERNIE_API_SCHEMA_BODY(Class, text) \
293 }
294
295 namespace ernie {
296 /// @return The registry entry a view's base gives its schema; none for the root view.
297 9497 template <typename Base> const SchemaDef* BaseDefinition() {
298 if constexpr (std::is_same_v<Base, SchemaView>) {
299 3214 return nullptr;
300 } else {
301 6283 return &Base::Definition();
302 }
303 }
304 } // namespace ernie
305
306 /// Defines `Class::Definition()`, the schema's registry entry, from the view class's name,
307 /// documentation and base; the variadic part takes the rest of its fields by name:
308 /// `.openNamespaces = {...}`, `.builtinApis = {...}`, `.fallbackOverrides = {...}`.
309 #define ERNIE_DEFINE_SCHEMA(Class, schemaKind, extentRule, OWN_ATTRIBUTES, ...) \
310 const ::ernie::SchemaDef& Class::Definition() { \
311 static const ::ernie::SchemaDef definition{ \
312 .name = Class::kName, \
313 .base = ::ernie::BaseDefinition<Class::SchemaBase>(), \
314 .kind = ::ernie::SchemaKind::schemaKind, \
315 .doc = Class::kDoc, \
316 .attributes = {OWN_ATTRIBUTES(ERNIE_ATTRIBUTE_DECLARE)}, \
317 .extent = extentRule, \
318 __VA_ARGS__}; \
319 return definition; \
320 }
321