Program Listing for File add.h

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

#ifndef SYMENGINE_ADD_H
#define SYMENGINE_ADD_H

#include <symengine/basic.h>

namespace SymEngine
{
class Add : public Basic
{
private:
    RCP<const Number> coef_;
    umap_basic_num dict_;

public:
    IMPLEMENT_TYPEID(SYMENGINE_ADD)
    Add(const RCP<const Number> &coef, umap_basic_num &&dict);
    virtual hash_t __hash__() const;
    virtual bool __eq__(const Basic &o) const;
    virtual int compare(const Basic &o) const;
    static RCP<const Basic> from_dict(const RCP<const Number> &coef,
                                      umap_basic_num &&d);
    static void dict_add_term(umap_basic_num &d, const RCP<const Number> &coef,
                              const RCP<const Basic> &t);
    static void coef_dict_add_term(const Ptr<RCP<const Number>> &coef,
                                   umap_basic_num &d,
                                   const RCP<const Number> &c,
                                   const RCP<const Basic> &term);
    void as_two_terms(const Ptr<RCP<const Basic>> &a,
                      const Ptr<RCP<const Basic>> &b) const;
    static void as_coef_term(const RCP<const Basic> &self,
                             const Ptr<RCP<const Number>> &coef,
                             const Ptr<RCP<const Basic>> &term);
    bool is_canonical(const RCP<const Number> &coef,
                      const umap_basic_num &dict) const;

    virtual vec_basic get_args() const;

    inline const RCP<const Number> &get_coef() const
    {
        return coef_;
    }
    inline const umap_basic_num &get_dict() const
    {
        return dict_;
    }
};

RCP<const Basic> add(const RCP<const Basic> &a, const RCP<const Basic> &b);
RCP<const Basic> add(const vec_basic &a);
RCP<const Basic> sub(const RCP<const Basic> &a, const RCP<const Basic> &b);

} // SymEngine

#endif