
/*
**  This file forms part of the GOBLIN C++ Class Library.
**
**  Written by Christian Fremuth-Paeger, May 2001.
**  
**  Copying, compiling, distribution and modification
**  of this source code is permitted only in accordance
**  with the GOBLIN general licence information.
*/             


#if !defined(_BBSTABLE_H_)

#define _BBSTABLE_H_

#include <bbscheme.h>
#include <absmix.h>


class BBStableSet : public goblinBBNode<TNode,TFloat>
{
public:

    abstractMixedGraph &G;
    char* colour;
    TNode currentVar;
    TNode selected;
    THandle H;
    
    BBStableSet(abstractMixedGraph&) throw();
    BBStableSet(BBStableSet&) throw();
    ~BBStableSet() throw();
    
    unsigned long   Size() throw();     
    unsigned long   Allocated() throw();     
    
    TNode           SelectVariable() throw();         // Select variable to branch with
    char            Direction1(TNode) throw(ERRange); // Select branching direction
    char            Direction2(TNode) throw(ERRange); // Select branching direction

    goblinBBNode<TNode,TFloat>* Clone() throw(); // Generate a copy of the branch node
    void            Raise(TNode) throw(ERRange);   // Raise lower variable bound
    void            Lower(TNode) throw(ERRange);   // Lower upper variable bound
    TFloat          SolveRelaxation() throw();     // Returns the objective value of the relaxed
                                                   // subproblem and a corresponding solution
    TFloat          Infinity() throw() {return InfFloat;};
    void            SaveSolution() throw();      // Copy the current solution to the original instance

};


#endif
