game: avoid a spurious g++14 warning
* spot/twaalgos/game.cc, spot/twaalgos/game.hh (get_state_winners): Declare a non-const version as well to avoid a "possibly dangling reference" error in code show by tut40.org.
This commit is contained in:
parent
941475fbdb
commit
376755dbd4
2 changed files with 39 additions and 20 deletions
|
|
@ -1085,12 +1085,12 @@ namespace spot
|
|||
return aut;
|
||||
}
|
||||
|
||||
void set_state_players(twa_graph_ptr arena, const region_t& owners)
|
||||
void set_state_players(twa_graph_ptr& arena, const region_t& owners)
|
||||
{
|
||||
set_state_players(arena, region_t(owners));
|
||||
}
|
||||
|
||||
void set_state_players(twa_graph_ptr arena, region_t&& owners)
|
||||
void set_state_players(twa_graph_ptr& arena, region_t&& owners)
|
||||
{
|
||||
if (owners.size() != arena->num_states())
|
||||
throw std::runtime_error
|
||||
|
|
@ -1100,7 +1100,7 @@ namespace spot
|
|||
new region_t(std::move(owners)));
|
||||
}
|
||||
|
||||
void set_state_player(twa_graph_ptr arena, unsigned state, bool owner)
|
||||
void set_state_player(twa_graph_ptr& arena, unsigned state, bool owner)
|
||||
{
|
||||
if (state >= arena->num_states())
|
||||
throw std::runtime_error("set_state_player(): invalid state number");
|
||||
|
|
@ -1141,7 +1141,7 @@ namespace spot
|
|||
return *owners;
|
||||
}
|
||||
|
||||
bool get_state_player(const_twa_graph_ptr arena, unsigned state)
|
||||
bool get_state_player(const const_twa_graph_ptr& arena, unsigned state)
|
||||
{
|
||||
if (state >= arena->num_states())
|
||||
throw std::runtime_error("get_state_player(): invalid state number");
|
||||
|
|
@ -1165,11 +1165,11 @@ namespace spot
|
|||
return *strat_ptr;
|
||||
}
|
||||
|
||||
void set_strategy(twa_graph_ptr arena, const strategy_t& strat)
|
||||
void set_strategy(twa_graph_ptr& arena, const strategy_t& strat)
|
||||
{
|
||||
set_strategy(arena, strategy_t(strat));
|
||||
}
|
||||
void set_strategy(twa_graph_ptr arena, strategy_t&& strat)
|
||||
void set_strategy(twa_graph_ptr& arena, strategy_t&& strat)
|
||||
{
|
||||
if (arena->num_states() != strat.size())
|
||||
throw std::runtime_error("set_strategy(): strategies need to have "
|
||||
|
|
@ -1214,12 +1214,12 @@ namespace spot
|
|||
}
|
||||
|
||||
|
||||
void set_state_winners(twa_graph_ptr arena, const region_t& winners)
|
||||
void set_state_winners(twa_graph_ptr& arena, const region_t& winners)
|
||||
{
|
||||
set_state_winners(arena, region_t(winners));
|
||||
}
|
||||
|
||||
void set_state_winners(twa_graph_ptr arena, region_t&& winners)
|
||||
void set_state_winners(twa_graph_ptr& arena, region_t&& winners)
|
||||
{
|
||||
if (winners.size() != arena->num_states())
|
||||
throw std::runtime_error
|
||||
|
|
@ -1229,7 +1229,7 @@ namespace spot
|
|||
new region_t(std::move(winners)));
|
||||
}
|
||||
|
||||
void set_state_winner(twa_graph_ptr arena, unsigned state, bool winner)
|
||||
void set_state_winner(twa_graph_ptr& arena, unsigned state, bool winner)
|
||||
{
|
||||
if (state >= arena->num_states())
|
||||
throw std::runtime_error("set_state_winner(): invalid state number");
|
||||
|
|
@ -1258,7 +1258,20 @@ namespace spot
|
|||
return *winners;
|
||||
}
|
||||
|
||||
bool get_state_winner(const_twa_graph_ptr arena, unsigned state)
|
||||
// This second version should not be needed, but g++14 emits
|
||||
// "possibly dangling reference" warnings when it sees that the
|
||||
// first function is called with a temporary const_twa_graph_ptr to
|
||||
// return a reference.
|
||||
const region_t& get_state_winners(twa_graph_ptr& arena)
|
||||
{
|
||||
region_t *winners = arena->get_named_prop<region_t>("state-winner");
|
||||
if (!winners)
|
||||
throw std::runtime_error
|
||||
("get_state_winners(): state-winner property not defined, not a game?");
|
||||
return *winners;
|
||||
}
|
||||
|
||||
bool get_state_winner(const const_twa_graph_ptr& arena, unsigned state)
|
||||
{
|
||||
if (state >= arena->num_states())
|
||||
throw std::runtime_error("get_state_winner(): invalid state number");
|
||||
|
|
|
|||
|
|
@ -151,20 +151,20 @@ namespace spot
|
|||
/// \brief Set the owner for all the states.
|
||||
/// @{
|
||||
SPOT_API
|
||||
void set_state_players(twa_graph_ptr arena, const region_t& owners);
|
||||
void set_state_players(twa_graph_ptr& arena, const region_t& owners);
|
||||
SPOT_API
|
||||
void set_state_players(twa_graph_ptr arena, region_t&& owners);
|
||||
void set_state_players(twa_graph_ptr& arena, region_t&& owners);
|
||||
/// @}
|
||||
|
||||
/// \ingroup games
|
||||
/// \brief Set the owner of a state.
|
||||
SPOT_API
|
||||
void set_state_player(twa_graph_ptr arena, unsigned state, bool owner);
|
||||
void set_state_player(twa_graph_ptr& arena, unsigned state, bool owner);
|
||||
|
||||
/// \ingroup games
|
||||
/// \brief Get the owner of a state.
|
||||
SPOT_API
|
||||
bool get_state_player(const_twa_graph_ptr arena, unsigned state);
|
||||
bool get_state_player(const const_twa_graph_ptr& arena, unsigned state);
|
||||
|
||||
/// \ingroup games
|
||||
/// \brief Get the owner of all states
|
||||
|
|
@ -181,9 +181,9 @@ namespace spot
|
|||
SPOT_API
|
||||
const strategy_t& get_strategy(const const_twa_graph_ptr& arena);
|
||||
SPOT_API
|
||||
void set_strategy(twa_graph_ptr arena, const strategy_t& strat);
|
||||
void set_strategy(twa_graph_ptr& arena, const strategy_t& strat);
|
||||
SPOT_API
|
||||
void set_strategy(twa_graph_ptr arena, strategy_t&& strat);
|
||||
void set_strategy(twa_graph_ptr& arena, strategy_t&& strat);
|
||||
/// @}
|
||||
|
||||
/// \ingroup games
|
||||
|
|
@ -205,23 +205,29 @@ namespace spot
|
|||
/// \brief Set the winner for all the states.
|
||||
/// @{
|
||||
SPOT_API
|
||||
void set_state_winners(twa_graph_ptr arena, const region_t& winners);
|
||||
void set_state_winners(twa_graph_ptr& arena, const region_t& winners);
|
||||
SPOT_API
|
||||
void set_state_winners(twa_graph_ptr arena, region_t&& winners);
|
||||
void set_state_winners(twa_graph_ptr& arena, region_t&& winners);
|
||||
/// @}
|
||||
|
||||
/// \ingroup games
|
||||
/// \brief Set the winner of a state.
|
||||
SPOT_API
|
||||
void set_state_winner(twa_graph_ptr arena, unsigned state, bool winner);
|
||||
void set_state_winner(twa_graph_ptr& arena, unsigned state, bool winner);
|
||||
|
||||
/// \ingroup games
|
||||
/// \brief Get the winner of a state.
|
||||
SPOT_API
|
||||
bool get_state_winner(const_twa_graph_ptr arena, unsigned state);
|
||||
bool get_state_winner(const const_twa_graph_ptr& arena, unsigned state);
|
||||
|
||||
/// \ingroup games
|
||||
/// \brief Get the winner of all states
|
||||
/// @{
|
||||
SPOT_API
|
||||
const region_t& get_state_winners(const const_twa_graph_ptr& arena);
|
||||
#ifndef SWIG
|
||||
SPOT_API
|
||||
const region_t& get_state_winners(twa_graph_ptr& arena);
|
||||
#endif
|
||||
/// @}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue