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
e6ebbdf65f
commit
45cb9caa0e
2 changed files with 39 additions and 20 deletions
|
|
@ -1085,12 +1085,12 @@ namespace spot
|
||||||
return aut;
|
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));
|
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())
|
if (owners.size() != arena->num_states())
|
||||||
throw std::runtime_error
|
throw std::runtime_error
|
||||||
|
|
@ -1100,7 +1100,7 @@ namespace spot
|
||||||
new region_t(std::move(owners)));
|
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())
|
if (state >= arena->num_states())
|
||||||
throw std::runtime_error("set_state_player(): invalid state number");
|
throw std::runtime_error("set_state_player(): invalid state number");
|
||||||
|
|
@ -1141,7 +1141,7 @@ namespace spot
|
||||||
return *owners;
|
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())
|
if (state >= arena->num_states())
|
||||||
throw std::runtime_error("get_state_player(): invalid state number");
|
throw std::runtime_error("get_state_player(): invalid state number");
|
||||||
|
|
@ -1165,11 +1165,11 @@ namespace spot
|
||||||
return *strat_ptr;
|
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));
|
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())
|
if (arena->num_states() != strat.size())
|
||||||
throw std::runtime_error("set_strategy(): strategies need to have "
|
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));
|
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())
|
if (winners.size() != arena->num_states())
|
||||||
throw std::runtime_error
|
throw std::runtime_error
|
||||||
|
|
@ -1229,7 +1229,7 @@ namespace spot
|
||||||
new region_t(std::move(winners)));
|
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())
|
if (state >= arena->num_states())
|
||||||
throw std::runtime_error("set_state_winner(): invalid state number");
|
throw std::runtime_error("set_state_winner(): invalid state number");
|
||||||
|
|
@ -1258,7 +1258,20 @@ namespace spot
|
||||||
return *winners;
|
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())
|
if (state >= arena->num_states())
|
||||||
throw std::runtime_error("get_state_winner(): invalid state number");
|
throw std::runtime_error("get_state_winner(): invalid state number");
|
||||||
|
|
|
||||||
|
|
@ -151,20 +151,20 @@ namespace spot
|
||||||
/// \brief Set the owner for all the states.
|
/// \brief Set the owner for all the states.
|
||||||
/// @{
|
/// @{
|
||||||
SPOT_API
|
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
|
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
|
/// \ingroup games
|
||||||
/// \brief Set the owner of a state.
|
/// \brief Set the owner of a state.
|
||||||
SPOT_API
|
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
|
/// \ingroup games
|
||||||
/// \brief Get the owner of a state.
|
/// \brief Get the owner of a state.
|
||||||
SPOT_API
|
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
|
/// \ingroup games
|
||||||
/// \brief Get the owner of all states
|
/// \brief Get the owner of all states
|
||||||
|
|
@ -181,9 +181,9 @@ namespace spot
|
||||||
SPOT_API
|
SPOT_API
|
||||||
const strategy_t& get_strategy(const const_twa_graph_ptr& arena);
|
const strategy_t& get_strategy(const const_twa_graph_ptr& arena);
|
||||||
SPOT_API
|
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
|
SPOT_API
|
||||||
void set_strategy(twa_graph_ptr arena, strategy_t&& strat);
|
void set_strategy(twa_graph_ptr& arena, strategy_t&& strat);
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// \ingroup games
|
/// \ingroup games
|
||||||
|
|
@ -205,23 +205,29 @@ namespace spot
|
||||||
/// \brief Set the winner for all the states.
|
/// \brief Set the winner for all the states.
|
||||||
/// @{
|
/// @{
|
||||||
SPOT_API
|
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
|
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
|
/// \ingroup games
|
||||||
/// \brief Set the winner of a state.
|
/// \brief Set the winner of a state.
|
||||||
SPOT_API
|
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
|
/// \ingroup games
|
||||||
/// \brief Get the winner of a state.
|
/// \brief Get the winner of a state.
|
||||||
SPOT_API
|
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
|
/// \ingroup games
|
||||||
/// \brief Get the winner of all states
|
/// \brief Get the winner of all states
|
||||||
|
/// @{
|
||||||
SPOT_API
|
SPOT_API
|
||||||
const region_t& get_state_winners(const const_twa_graph_ptr& arena);
|
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