/*
 * Copyright (c) 1999 Johnny C. Lam.
 * All rights reserved.
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  The author makes no representations
 * about the suitability of this software for any purpose.  It is
 * provided "as is" without express or implied warranty.
 */

/* -*- C++ -*- */

#ifndef PATH_CRITERION_FACTORY_H_INCLUDED
#define PATH_CRITERION_FACTORY_H_INCLUDED

#ifndef STD_MEMORY_INCLUDED
#include <memory>
#define STD_MEMORY_INCLUDED
#endif

#ifndef DP_SINGLETON_INCLUDED
#include <singleton>
#define DP_SINGLETON_INCLUDED
#endif

#ifndef STD_STRING_INCLUDED
#include <string>
#define STD_STRING_INCLUDED
#endif

#ifndef PATH_CRITERION_H_INCLUDED
#include "path_criterion.h"
#endif

#ifndef TYPES_H_INCLUDED
#include "types.h"
#endif

class PathCriterionFactory : public Singleton<PathCriterionFactory> {
public:
    typedef string choice_type;

    static const choice_type AVERAGE;
    static const choice_type MIN;
    static const choice_type MAX;

public:
    auto_ptr<PathCriterion> Make(choice_type) const;
};

#endif /* PATH_CRITERION_FACTORY_H_INCLUDED */
