]> www.ginac.de Git - ginac.git/blobdiff - ginac/idx.h
- documented map(), find(), and new symmetry specifications for indexed objects
[ginac.git] / ginac / idx.h
index 02caba5a93c058a308588c6e53c68b6635c25538..d98d4b14932bf1b6db5cd829e8f987c09d1816f1 100644 (file)
@@ -51,9 +51,13 @@ public:
        bool info(unsigned inf) const;
        unsigned nops() const;
        ex & let_op(int i);
-protected:
+       ex evalf(int level = 0) const;
        ex subs(const lst & ls, const lst & lr, bool no_pattern = false) const;
 
+protected:
+       ex derivative(const symbol & s) const;
+       bool match_same_type(const basic & other) const;
+
        // new virtual functions in this class
 public:
        /** Check whether the index forms a dummy index pair with another index
@@ -107,6 +111,9 @@ public:
        void print(const print_context & c, unsigned level = 0) const;
        bool is_dummy_pair_same_type(const basic & other) const;
 
+protected:
+       bool match_same_type(const basic & other) const;
+
        // non-virtual functions in this class
 public:
        /** Check whether the index is covariant. */
@@ -149,6 +156,9 @@ public:
        void print(const print_context & c, unsigned level = 0) const;
        bool is_dummy_pair_same_type(const basic & other) const;
 
+protected:
+       bool match_same_type(const basic & other) const;
+
        // non-virtual functions in this class
 public:
        /** Check whether the index is dotted. */
@@ -172,21 +182,46 @@ protected:
 
 
 // utility functions
+
+/** Return the idx object handled by an ex.  Deprecated: use ex_to<idx>().
+ *  This is unsafe: you need to check the type first. */
 inline const idx &ex_to_idx(const ex & e)
 {
        return static_cast<const idx &>(*e.bp);
 }
 
+/** Return the varidx object handled by an ex.  Deprecated: use ex_to<varidx>().
+ *  This is unsafe: you need to check the type first. */
 inline const varidx &ex_to_varidx(const ex & e)
 {
        return static_cast<const varidx &>(*e.bp);
 }
 
+/** Return the spinidx object handled by an ex.  Deprecated: use ex_to<spinidx>().
+ *  This is unsafe: you need to check the type first. */
 inline const spinidx &ex_to_spinidx(const ex & e)
 {
        return static_cast<const spinidx &>(*e.bp);
 }
 
+/** Specialization of is_exactly_a<idx>(obj) for idx objects. */
+template<> inline bool is_exactly_a<idx>(const basic & obj)
+{
+        return obj.tinfo()==TINFO_idx;
+}
+
+/** Specialization of is_exactly_a<varidx>(obj) for varidx objects. */
+template<> inline bool is_exactly_a<varidx>(const basic & obj)
+{
+        return obj.tinfo()==TINFO_varidx;
+}
+
+/** Specialization of is_exactly_a<spinidx>(obj) for spinidx objects. */
+template<> inline bool is_exactly_a<spinidx>(const basic & obj)
+{
+        return obj.tinfo()==TINFO_spinidx;
+}
+
 /** Check whether two indices form a dummy pair. */
 bool is_dummy_pair(const idx & i1, const idx & i2);