Listing 1
// search.h
namespace dct
{
template <typename STATE_T, typename OP_T>
struct search_result_template_t
{
STATE_T goal_state_reached;
double cost;
std::vector<OP_T> operators;
};
template <...> // See article text for template parameters
class search_engine_t: ... // Inherit from policy classes
{
public:
typedef std::set<
search_result_template_t<STATE_T, OP_T>,
result_comp_t<STATE_T, OP_T> // Not shown
> search_result_t;
search_result_t a_star(
const STATE_T &initial_state,
bool return_all = false
);
search_result_t breadth_first(
const STATE_T &initial_state,
bool return_all = false
);
search_result_t depth_first(
const STATE_T &initial_state,
bool return_all = false
);
search_result_t depth_limited(
const STATE_T &initial_state,
unsigned int depth_limit,
bool return_all = false
);
search_result_t greedy(
const STATE_T &initial_state,
bool return_all = false
);
search_result_t iterative_deepening(
const STATE_T &initial_state,
unsigned int depth_limit
);
search_result_t uniform_cost(
const STATE_T &initial_state,
bool return_all = false
);
};
}