#define __OBJECT_CPP

#include <object.h>

///////////////////////////////////////////////////////////
// Object
///////////////////////////////////////////////////////////

const char* TObject::class_name() const
{ return "Object"; }

word TObject::class_id() const
{ return CLASS_OBJECT; }

bool TObject::is_kind_of(word cid) const
{ return cid == CLASS_OBJECT; }

bool TObject::ok() const
{ return true; }

TObject* TObject::dup() const
{
  CHECK(false, "Can't duplicate an Object");
  return 0L;
}

void TObject::print_on(ostream& out) const
{ out << class_name(); }

///////////////////////////////////////////////////////////
// Error Object
///////////////////////////////////////////////////////////

const char* TError_Object::class_name() const
{ return "Error_Object"; }

word TError_Object::class_id() const
{ return CLASS_ERROR; }

bool TError_Object::is_kind_of(word cid) const
{ return cid == CLASS_ERROR || TObject::is_kind_of(cid); }

bool TError_Object::ok() const
{ return false; }

///////////////////////////////////////////////////////////
// Sortable
///////////////////////////////////////////////////////////

const char* TSortable::class_name() const
{ return "Sortable"; }

word TSortable::class_id() const
{ return CLASS_SORTABLE; }

bool TSortable::is_kind_of(word cid) const
{ return cid == CLASS_SORTABLE || TObject::is_kind_of(cid); }