/******************************************************************
** Copyright (C) 2001, University of Alabama in Huntsville. 
** All rights reserved.
**
** File   : Class.h
**
** Author : Yangsen Yao
**
** Description:
**    This file provides definition for the CLIPS class
**    class.
**
** History:
**    26-Nov-2001 : Yangsen Yao
**        Created file.
******************************************************************/

#ifndef _CLASS_H_
#define _CLASS_H_

#include <string>
#include <vector>

extern "C" 
{
  #include "clips/clips.h"
}

#include "Construct.h"

class CCLPClass : public CCLPConstruct
{
 public:
    
    CCLPClass();
    CCLPClass(void* pDefClass);

    class CLIPS_Exception {};
    class Class_Not_Found : public CLIPS_Exception {};
    static CCLPClass* FindByName(std::string className);
    void AddSlot(std::string slot);
    void DeleteSlot(std::string slot);
    void BrowseClass();
    void ListDefClass();
    void Describe();
	void Define(std::string superClass);
    
    DATA_OBJECT GetSlots();
    DATA_OBJECT SubClass();
    DATA_OBJECT SuperClass();

    std::string NameOf();
	void SetName(std::string sName);
    
    bool IsAbstract();
    bool IsDeletable();
    bool IsSubClass(std::string str);
    bool IsSuperClass(std::string str);

	void* GetDefClass();
 private:
	 
	 typedef std::vector<std::string> slot_vector_type;
    
    slot_vector_type m_slots;
	std::string m_sName;
    void *m_pDefClass;
    
};

#endif // _CLASS_H_
