#ifndef _IOBJECTSTORE
#define _IOBJECTSTORE

#include "types.h"

#include "Kyoto/CToken.hpp"

#include "rstl/auto_ptr.hpp"
#include "rstl/rc_ptr.hpp"

class IObjectStore {
public:
  virtual CToken GetObj(const SObjectTag& tag, CVParamTransfer xfer) = 0;
  virtual CToken GetObj(const SObjectTag& tag) = 0;
  virtual CToken GetObj(const char* name) = 0;
  virtual CToken GetObj(const char* name, CVParamTransfer xfer) = 0;
  virtual bool HasObject(const SObjectTag& tag) = 0;
  virtual bool ObjectIsLive(const SObjectTag& tag) = 0;
  virtual unkptr GetFactory() = 0;
  virtual void Flush() = 0;
  virtual void ObjectUnreferenced(const SObjectTag& tag) = 0;
};

#endif // _IOBJECTSTORE