Skip to content

Commit

Permalink
Port generic_factory functions to string_view (#65120)
Browse files Browse the repository at this point in the history
This batch is mostly stuff related to generic_factory, assign, optional,
and mandatory, with a couple of other random functions.
  • Loading branch information
jbytheway authored Apr 17, 2023
1 parent b46e227 commit 642b38f
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 56 deletions.
16 changes: 8 additions & 8 deletions src/assign.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ void report_strict_violation( const JsonObject &jo, const std::string &message,
}
}

bool assign( const JsonObject &jo, const std::string &name, bool &val, bool strict )
bool assign( const JsonObject &jo, const std::string_view name, bool &val, bool strict )
{
bool out;

Expand Down Expand Up @@ -109,7 +109,7 @@ bool assign( const JsonObject &jo, const std::string &name, units::volume &val,
return true;
}

bool assign( const JsonObject &jo, const std::string &name, units::mass &val, bool strict,
bool assign( const JsonObject &jo, const std::string_view name, units::mass &val, bool strict,
const units::mass lo, const units::mass hi )
{
const auto parse = [&name]( const JsonObject & obj, units::mass & out ) {
Expand Down Expand Up @@ -173,7 +173,7 @@ bool assign( const JsonObject &jo, const std::string &name, units::mass &val, bo
return true;
}

bool assign( const JsonObject &jo, const std::string &name, units::length &val, bool strict,
bool assign( const JsonObject &jo, const std::string_view name, units::length &val, bool strict,
const units::length lo, const units::length hi )
{
const auto parse = [&name]( const JsonObject & obj, units::length & out ) {
Expand Down Expand Up @@ -237,7 +237,7 @@ bool assign( const JsonObject &jo, const std::string &name, units::length &val,
return true;
}

bool assign( const JsonObject &jo, const std::string &name, units::money &val, bool strict,
bool assign( const JsonObject &jo, const std::string_view name, units::money &val, bool strict,
const units::money lo, const units::money hi )
{
const auto parse = [&name]( const JsonObject & obj, units::money & out ) {
Expand Down Expand Up @@ -301,7 +301,7 @@ bool assign( const JsonObject &jo, const std::string &name, units::money &val, b
return true;
}

bool assign( const JsonObject &jo, const std::string &name, units::energy &val, bool strict,
bool assign( const JsonObject &jo, const std::string_view name, units::energy &val, bool strict,
const units::energy lo, const units::energy hi )
{
const auto parse = [&name]( const JsonObject & obj, units::energy & out ) {
Expand Down Expand Up @@ -370,7 +370,7 @@ bool assign( const JsonObject &jo, const std::string &name, units::energy &val,
return true;
}

bool assign( const JsonObject &jo, const std::string &name, units::power &val, bool strict,
bool assign( const JsonObject &jo, const std::string_view name, units::power &val, bool strict,
const units::power lo, const units::power hi )
{
const auto parse = [&name]( const JsonObject & obj, units::power & out ) {
Expand Down Expand Up @@ -504,7 +504,7 @@ static void assign_dmg_relative( damage_instance &out, const damage_instance &va
}
}

static void assign_dmg_proportional( const JsonObject &jo, const std::string &name,
static void assign_dmg_proportional( const JsonObject &jo, const std::string_view name,
damage_instance &out,
const damage_instance &val,
damage_instance proportional, bool &strict )
Expand Down Expand Up @@ -583,7 +583,7 @@ static void assign_dmg_proportional( const JsonObject &jo, const std::string &na
}
}

static void check_assigned_dmg( const JsonObject &err, const std::string &name,
static void check_assigned_dmg( const JsonObject &err, const std::string_view name,
const damage_instance &out, const damage_instance &lo_inst, const damage_instance &hi_inst )
{
for( const damage_unit &out_dmg : out.damage_units ) {
Expand Down
18 changes: 9 additions & 9 deletions src/assign.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ void report_strict_violation( const JsonObject &jo, const std::string &message,
std::string_view name );

template <typename T, typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
bool assign( const JsonObject &jo, const std::string &name, T &val, bool strict = false,
bool assign( const JsonObject &jo, std::string_view name, T &val, bool strict = false,
T lo = std::numeric_limits<T>::lowest(), T hi = std::numeric_limits<T>::max() )
{
T out;
Expand Down Expand Up @@ -91,7 +91,7 @@ bool assign( const JsonObject &jo, const std::string &name, T &val, bool strict

// Overload assign specifically for bool to avoid warnings,
// and also to avoid potentially nonsensical interactions between relative and proportional.
bool assign( const JsonObject &jo, const std::string &name, bool &val, bool strict = false );
bool assign( const JsonObject &jo, std::string_view name, bool &val, bool strict = false );

template <typename T, typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
bool assign( const JsonObject &jo, const std::string_view name, std::pair<T, T> &val,
Expand Down Expand Up @@ -209,27 +209,27 @@ bool assign( const JsonObject &jo, const std::string &name, units::volume &val,
units::volume lo = units::volume_min,
units::volume hi = units::volume_max );

bool assign( const JsonObject &jo, const std::string &name, units::mass &val,
bool assign( const JsonObject &jo, std::string_view name, units::mass &val,
bool strict = false,
units::mass lo = units::mass_min,
units::mass hi = units::mass_max );

bool assign( const JsonObject &jo, const std::string &name, units::length &val,
bool assign( const JsonObject &jo, std::string_view name, units::length &val,
bool strict = false,
units::length lo = units::length_min,
units::length hi = units::length_max );

bool assign( const JsonObject &jo, const std::string &name, units::money &val,
bool assign( const JsonObject &jo, std::string_view name, units::money &val,
bool strict = false,
units::money lo = units::money_min,
units::money hi = units::money_max );

bool assign( const JsonObject &jo, const std::string &name, units::energy &val,
bool assign( const JsonObject &jo, std::string_view name, units::energy &val,
bool strict = false,
units::energy lo = units::energy_min,
units::energy hi = units::energy_max );

bool assign( const JsonObject &jo, const std::string &name, units::power &val,
bool assign( const JsonObject &jo, std::string_view name, units::power &val,
bool strict = false,
units::power lo = units::power_min,
units::power hi = units::power_max );
Expand All @@ -241,7 +241,7 @@ class time_duration;
template<typename T>
inline typename
std::enable_if<std::is_same<typename std::decay<T>::type, time_duration>::value, bool>::type
read_with_factor( const JsonObject &jo, const std::string &name, T &val, const T &factor )
read_with_factor( const JsonObject &jo, const std::string_view name, T &val, const T &factor )
{
int tmp;
if( jo.read( name, tmp, false ) ) {
Expand Down Expand Up @@ -307,7 +307,7 @@ std::enable_if<std::is_same<typename std::decay<T>::type, time_duration>::value,
}

template<typename T>
inline bool assign( const JsonObject &jo, const std::string &name, std::optional<T> &val,
inline bool assign( const JsonObject &jo, const std::string_view name, std::optional<T> &val,
const bool strict = false )
{
if( !jo.has_member( name ) ) {
Expand Down
2 changes: 1 addition & 1 deletion src/behavior_oracle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
namespace behavior
{

status_t return_running( const oracle_t *, const std::string & )
status_t return_running( const oracle_t *, const std::string_view )
{
return status_t::running;
}
Expand Down
2 changes: 1 addition & 1 deletion src/behavior_oracle.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ class oracle_t
{
};

status_t return_running( const oracle_t *, const std::string & );
status_t return_running( const oracle_t *, std::string_view );

extern std::unordered_map<std::string, std::function<status_t( const oracle_t *, const std::string & )>>
predicate_map;
Expand Down
7 changes: 4 additions & 3 deletions src/generic_factory.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#include "generic_factory.h"

bool one_char_symbol_reader( const JsonObject &jo, const std::string &member_name, int &sym,
bool one_char_symbol_reader( const JsonObject &jo, const std::string_view member_name, int &sym,
bool )
{
std::string sym_as_string;
Expand All @@ -25,7 +25,7 @@ bool one_char_symbol_reader( const JsonObject &jo, const std::string &member_nam
}

bool unicode_codepoint_from_symbol_reader( const JsonObject &jo,
const std::string &member_name, uint32_t &member, bool )
const std::string_view member_name, uint32_t &member, bool )
{
int sym_as_int;
std::string sym_as_string;
Expand All @@ -39,7 +39,8 @@ bool unicode_codepoint_from_symbol_reader( const JsonObject &jo,
}
uint32_t sym_as_codepoint = UTF8_getch( sym_as_string );
if( mk_wcwidth( sym_as_codepoint ) != 1 ) {
jo.throw_error_at( member_name, member_name + " must be exactly one console cell wide" );
jo.throw_error_at(
member_name, str_cat( member_name, " must be exactly one console cell wide" ) );
}
member = sym_as_codepoint;
return true;
Expand Down
Loading

0 comments on commit 642b38f

Please sign in to comment.