/*
 * 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 SEGMENT_H_INCLUDED
#define SEGMENT_H_INCLUDED

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

#ifndef HAPLOTYPE_H_INCLUDED
#include "haplotype.h"
#endif

class HDictionary;

///////////////////////////////////////////////////////////////////////////
//
// SegmentProbability
//
// Abstract class providing interface for classes which calculate the
// probability of a haplotype segment within the context of a HDictionary.
//
// Provides the strategy for HDictionary.
//
///////////////////////////////////////////////////////////////////////////

class SegmentProbability {
public:
    typedef Haplotype::size_type size_type;
    
    virtual ~SegmentProbability();
    SegmentProbability(bool);
    
    virtual probability	Probability(HDictionary*, const Haplotype&,
				    size_type ) const = 0;

    virtual probability	NAProbability() const;
    bool		Verbose() const;
    
private:
    bool _verbose;
};

#include "segment_inline.h"

#endif // SEGMENT_H_INCLUDED
