#define __MODEL_H__
#include <tr1/memory>
+#include <string>
class SortAction;
class GeneOrder;
class ModelImpl;
}
+/**
+ * Abstraction of a model.
+ *
+ * Handles scoring of specific actions on gene orders.
+ */
class Model{
public:
typedef std::tr1::shared_ptr<Models::ModelImpl> ModelPointer;
+ /**
+ * Constructs a new model.
+ *
+ * \param model The actual model implementation. This model takes
+ * ownership of the new allocated implementation and will delete it.
+ */
Model(Models::ModelImpl* model);
+ /**
+ * Gives the score for the action on a given gene order.
+ * A better match for this model gives a higher score.
+ */
double score(const SortAction& sa, const GeneOrder& go) const;
+ /**
+ * The name for the model used.
+ */
const char* name() const;
+ /**
+ * Creates a model from a name.
+ */
+ static Model modelFactory(const std::string& name);
+
private:
ModelPointer _impl;