/*
    MultiNode sample code
    Henry Smith (henry@enigmasoftware.ca)

    MultiNode base class encapsulating non-templatized behaviour
*/


#ifndef MultiNodeBase_H
#define MultiNodeBase_H

#include "MultiNodeImpl.h"
#include "MultiNodeRef.h"

////////////////////////////////////////////////////////////////////////////////
//
//  MultiNodeBase
//
////////////////////////////////////////////////////////////////////////////////

class MultiNodeBase
    : public MultiNodeImpl
{
    typedef MultiNodeImpl Super;

    public:
        MultiNodeBase ();
        virtual ~MultiNodeBase ();

    // Family-specific node operations

        void AddChildIn (FamilyID inFamily, MultiNodeRef inNode);
        void RemoveChildIn (FamilyID inFamily, MultiNodeRef inNode);
        bool HasChildrenIn (FamilyID inFamily) const;
        int CountChildrenIn (FamilyID inFamily) const;

    // Basic node operations (these operate on the current family)

    private:
        void AddChild (MultiNodeRef& inNode);
        void RemoveChild (MultiNodeRef& inNode);
        bool HasChildren () const;
        int CountChildren () const;
};

#endif  // MultiNodeBase_H