/*
   HARK Library
   Copyright (C) 2021 Honda Research Institute Japan Inc.
 */

#if !defined(_HARKLIB_OBJECT_H_INCLUDED_)
#define _HARKLIB_OBJECT_H_INCLUDED_ 1

#include "hark-lib/hark-lib.h"
#include <iostream>
#include <memory>

namespace hark
{
    class object {
    public:
        struct types {
            static int any;

        };

    public:
        object();
        virtual ~object();

    public:
        virtual std::ostream&write(std::ostream &os) const;

    };

    std::ostream &operator << (std::ostream &os, const object &value);

    // template<typename T, typename Base=object>
    // class Ref: Base
    // {
    // public:
    //     Ref();
    //
    // public:
    //     operator T * (){
    //         return this->_value.get();
    //     }
    //
    // private:
    //     std::shared_ptr<T> _value;
    //
    // };
    //
    // using NodeRef = Ref<Node>;
    // using NetworkRef = Ref<Network, NodeRef>;

}


#endif /* #if !defined(_HARKLIB_OBJECT_H_INCLUDED_) */

/* end of file */
