Program Listing for File symbol.h

Return to documentation for file (symengine/symengine/symbol.h)

#ifndef SYMENGINE_SYMBOL_H
#define SYMENGINE_SYMBOL_H

#include <symengine/basic.h>

namespace SymEngine
{

class Symbol : public Basic
{
private:
    std::string name_;

public:
    IMPLEMENT_TYPEID(SYMENGINE_SYMBOL)
    explicit Symbol(const std::string &name);
    virtual hash_t __hash__() const;
    virtual bool __eq__(const Basic &o) const;

    virtual int compare(const Basic &o) const;
    inline const std::string &get_name() const
    {
        return name_;
    }

    virtual vec_basic get_args() const
    {
        return {};
    }
    RCP<const Symbol> as_dummy() const;
};

class Dummy : public Symbol
{
private:
    static size_t count_;
    size_t dummy_index;

public:
    IMPLEMENT_TYPEID(SYMENGINE_DUMMY)
    explicit Dummy();
    explicit Dummy(const std::string &name);
    virtual hash_t __hash__() const;
    virtual bool __eq__(const Basic &o) const;
    virtual int compare(const Basic &o) const;
    size_t get_index() const
    {
        return dummy_index;
    }
};

inline RCP<const Symbol> symbol(const std::string &name)
{
    return make_rcp<const Symbol>(name);
}

inline RCP<const Dummy> dummy()
{
    return make_rcp<const Dummy>();
}

inline RCP<const Dummy> dummy(const std::string &name)
{
    return make_rcp<const Dummy>(name);
}

} // SymEngine

#endif