Skip to content

Commit b08e56c

Browse files
committed
vibe-coded suggestions for size optimization
1 parent 3255bc3 commit b08e56c

File tree

1 file changed

+102
-99
lines changed

1 file changed

+102
-99
lines changed

src/backend/ScientificDefaults.cpp

Lines changed: 102 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,92 @@ namespace
5959
a.getVariant<attribute_types>());
6060
return std::cerr;
6161
}
62+
63+
// Helper function to set geometry based on string value
64+
inline void setMeshGeometryFromString(Mesh &mesh, std::string val)
65+
{
66+
if ("cartesian" == val)
67+
mesh.setGeometry(Mesh::Geometry::cartesian);
68+
else if ("thetaMode" == val)
69+
mesh.setGeometry(Mesh::Geometry::thetaMode);
70+
else if ("cylindrical" == val)
71+
mesh.setGeometry(Mesh::Geometry::cylindrical);
72+
else if ("spherical" == val)
73+
mesh.setGeometry(Mesh::Geometry::spherical);
74+
else
75+
mesh.setGeometry(std::move(val));
76+
}
77+
78+
// Helper function to set data order based on char value
79+
inline auto setMeshDataOrderFromChar(Mesh &mesh, char val)
80+
-> std::optional<error::ReadError>
81+
{
82+
if (val == 'C' || val == 'F')
83+
{
84+
mesh.setDataOrder(static_cast<Mesh::DataOrder>(val));
85+
return std::nullopt;
86+
}
87+
else
88+
{
89+
return error::ReadError(
90+
error::AffectedObject::Attribute,
91+
error::Reason::UnexpectedContent,
92+
std::nullopt,
93+
"Data order must be either C or F.");
94+
}
95+
}
96+
97+
// Helper function to create default axis labels based on dimensionality
98+
inline auto createDefaultAxisLabels(uint64_t dimensionality)
99+
-> std::vector<std::string>
100+
{
101+
switch (dimensionality)
102+
{
103+
case 0:
104+
case 1:
105+
return {"x"};
106+
case 2:
107+
return {"x", "y"};
108+
case 3:
109+
return {"x", "y", "z"};
110+
default:
111+
if (dimensionality < 100)
112+
{
113+
// x1, x2, x3, x4, ...
114+
std::vector<std::string> res;
115+
res.reserve(dimensionality);
116+
for (uint64_t i = 0; i < dimensionality; ++i)
117+
{
118+
res.emplace_back("x" + std::to_string(i));
119+
}
120+
return res;
121+
}
122+
else
123+
{
124+
std::string msg =
125+
"Please verify dimensionality. Was inferred as '";
126+
msg += std::to_string(dimensionality);
127+
msg += "'. Seems a bit much.";
128+
return {std::move(msg)};
129+
}
130+
}
131+
return std::vector<std::string>{"x", "y", "z"};
132+
}
133+
134+
// Helper function to create default vector based on dimensionality
135+
inline auto
136+
createDefaultVector(uint64_t dimensionality, double defaultValue)
137+
-> std::vector<double>
138+
{
139+
if (dimensionality < 100)
140+
{
141+
return std::vector<double>(dimensionality, defaultValue);
142+
}
143+
else
144+
{
145+
return std::vector<double>{defaultValue};
146+
}
147+
}
62148
} // namespace
63149

64150
AttributeReader::AttributeReader(
@@ -339,11 +425,13 @@ auto RequireScalar::operator()(
339425
return std::visit(
340426
auxiliary::overloaded{
341427
[](std::runtime_error const &err) -> res_t {
428+
std::string msg = "Expected a scalar type: ";
429+
msg += err.what();
342430
return error::ReadError(
343431
error::AffectedObject::Attribute,
344432
error::Reason::UnexpectedContent,
345433
std::nullopt,
346-
std::string("Expected a scalar type: ") + err.what());
434+
std::move(msg));
347435
},
348436
[&](Attribute converted_attr) -> res_t {
349437
record.setAttribute(attrName, std::move(converted_attr));
@@ -362,11 +450,13 @@ auto RequireVector::operator()(
362450
return std::visit(
363451
auxiliary::overloaded{
364452
[](std::runtime_error const &err) -> res_t {
453+
std::string msg = "Expected a vector type: ";
454+
msg += err.what();
365455
return error::ReadError(
366456
error::AffectedObject::Attribute,
367457
error::Reason::UnexpectedContent,
368458
std::nullopt,
369-
std::string("Expected a vector type: ") + err.what());
459+
std::move(msg));
370460
},
371461
[&](Attribute converted_attr) -> res_t {
372462
record.setAttribute(attrName, std::move(converted_attr));
@@ -397,11 +487,13 @@ auto RequireType<T>::operator()(
397487
},
398488
[](std::runtime_error const &err)
399489
-> std::optional<error::ReadError> {
490+
std::string msg = "Expected a scalar type: ";
491+
msg += err.what();
400492
return error::ReadError(
401493
error::AffectedObject::Attribute,
402494
error::Reason::UnexpectedContent,
403495
std::nullopt,
404-
std::string("Expected a scalar type: ") + err.what());
496+
std::move(msg));
405497
}},
406498
converted_or_error);
407499
}
@@ -506,105 +598,34 @@ void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
506598
.withReader(
507599
string_types,
508600
require_type<std::string>([this](std::string val) {
509-
auto &m = asChild();
510-
if ("cartesian" == val)
511-
m.setGeometry(Mesh::Geometry::cartesian);
512-
else if ("thetaMode" == val)
513-
m.setGeometry(Mesh::Geometry::thetaMode);
514-
else if ("cylindrical" == val)
515-
m.setGeometry(Mesh::Geometry::cylindrical);
516-
else if ("spherical" == val)
517-
m.setGeometry(Mesh::Geometry::spherical);
518-
else
519-
m.setGeometry(std::move(val));
601+
setMeshGeometryFromString(asChild(), std::move(val));
520602
}))(wor);
521603

522604
defaultAttribute("dataOrder")
523605
.template withSetter<Mesh>(Mesh::DataOrder::C, &Mesh::setDataOrder)
524606
.withReader(
525607
string_types,
526608
require_type<char>([this](char val) -> maybe_read_error {
527-
auto &m = this->asChild();
528-
if (val == 'C' || val == 'F')
529-
{
530-
m.setDataOrder(static_cast<Mesh::DataOrder>(val));
531-
return std::nullopt;
532-
}
533-
else
534-
{
535-
return error::ReadError(
536-
error::AffectedObject::Attribute,
537-
error::Reason::UnexpectedContent,
538-
std::nullopt,
539-
"Data order must be either C or F.");
540-
}
609+
return setMeshDataOrderFromChar(asChild(), val);
541610
}))(wor);
542611

543612
defaultAttribute("axisLabels")
544613
.template withSetter<Mesh, std::vector<std::string> const &>(
545614
[&]() -> std::vector<std::string> {
546-
switch (dimensionality)
547-
{
548-
case 0:
549-
case 1:
550-
return {"x"};
551-
case 2:
552-
return {"x", "y"};
553-
case 3:
554-
return {"x", "y", "z"};
555-
default:
556-
if (dimensionality < 100)
557-
{
558-
// x1, x2, x3, x4, ...
559-
std::vector<std::string> res;
560-
res.reserve(dimensionality);
561-
for (uint64_t i = 0; i < dimensionality; ++i)
562-
{
563-
res.emplace_back("x" + std::to_string(i));
564-
}
565-
return res;
566-
}
567-
else
568-
{
569-
return {
570-
"Please verify dimensionality. Was inferred as "
571-
"'" +
572-
std::to_string(dimensionality) +
573-
"'. Seems a bit much."};
574-
}
575-
}
576-
return std::vector<std::string>{"x", "y", "z"};
615+
return createDefaultAxisLabels(dimensionality);
577616
},
578617
&Mesh::setAxisLabels)
579618
.withReader(string_types, require_vector)(wor);
580619

581620
defaultAttribute("gridSpacing")
582621
.template withSetter<Mesh, std::vector<double> const &>(
583-
[&]() {
584-
if (dimensionality < 100)
585-
{
586-
return std::vector<double>(dimensionality, 1.0);
587-
}
588-
else
589-
{
590-
return std::vector<double>{1.0};
591-
}
592-
},
622+
[&]() { return createDefaultVector(dimensionality, 1.0); },
593623
&Mesh::setGridSpacing)
594624
.withReader(float_types, require_vector)(wor);
595625

596626
defaultAttribute("gridGlobalOffset")
597627
.template withSetter<Mesh, std::vector<double> const &>(
598-
[&]() {
599-
if (dimensionality < 100)
600-
{
601-
return std::vector<double>(dimensionality, 0.0);
602-
}
603-
else
604-
{
605-
return std::vector<double>{0.0};
606-
}
607-
},
628+
[&]() { return createDefaultVector(dimensionality, 0.0); },
608629
&Mesh::setGridGlobalOffset)
609630
.withReader(float_types, require_type<std::vector<double>>())(wor);
610631

@@ -616,16 +637,7 @@ void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
616637
{
617638
defaultAttribute("gridUnitSI")
618639
.template withSetter<Mesh, std::vector<double> const &>(
619-
[&]() {
620-
if (dimensionality < 100)
621-
{
622-
return std::vector<double>(dimensionality, 1.);
623-
}
624-
else
625-
{
626-
return std::vector<double>{1.};
627-
}
628-
},
640+
[&]() { return createDefaultVector(dimensionality, 1.); },
629641
&Mesh::setGridUnitSIPerDimension)
630642
.withReader(float_types, require_type<std::vector<double>>())(
631643
wor);
@@ -683,16 +695,7 @@ void ScientificDefaults<Child>::defaults_impl(OpenpmdStandard standard)
683695

684696
defaultAttribute("position")
685697
.template withSetter<MeshRecordComponent>(
686-
[&]() {
687-
if (dimensionality < 100)
688-
{
689-
return std::vector<double>(dimensionality, 0.5);
690-
}
691-
else
692-
{
693-
return std::vector<double>{0.0};
694-
}
695-
},
698+
[&]() { return createDefaultVector(dimensionality, 0.5); },
696699
&MeshRecordComponent::setPosition)
697700
.withReader(float_types, require_vector)(wor);
698701

0 commit comments

Comments
 (0)