/** @file basic.h
*
- * Interface to GiNaC's ABC.
- *
+ * Interface to GiNaC's ABC. */
+
+/*
* GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
#include <typeinfo>
#include <vector>
+#include <ginac/flags.h>
+#include <ginac/tinfos.h>
+#include <ginac/assertion.h>
+
+namespace GiNaC {
+
class basic;
class ex;
class symbol;
public:
basic()
#ifdef INLINE_BASIC_CONSTRUCTORS
- : tinfo_key(TINFO_BASIC), flags(0), refcount(0)
+ : tinfo_key(TINFO_basic), flags(0), refcount(0)
{
- debugmsg("basic default constructor",LOGLEVEL_CONSTRUCT);
- // nothing to do
}
#else
;
virtual ~basic()
#ifdef INLINE_BASIC_CONSTRUCTORS
{
- debugmsg("basic destructor",LOGLEVEL_DESTRUCT);
destroy(0);
ASSERT((!(flags & status_flags::dynallocated))||(refcount==0));
}
basic(basic const & other)
#ifdef INLINE_BASIC_CONSTRUCTORS
{
- debugmsg("basic copy constructor",LOGLEVEL_CONSTRUCT);
copy(other);
}
#else
#ifdef INLINE_BASIC_CONSTRUCTORS
: tinfo_key(ti), flags(0), refcount(0)
{
- debugmsg("basic constructor with tinfo_key",LOGLEVEL_CONSTRUCT);
- // nothing to do
}
#else
;
extern int max_recursion_level;
-/*
-#ifndef _DEBUG
-*/
+// convenience macros
#define is_of_type(OBJ,TYPE) \
- (dynamic_cast<TYPE *>(const_cast<basic *>(&OBJ))!=0)
+ (dynamic_cast<TYPE *>(const_cast<GiNaC::basic *>(&OBJ))!=0)
-/*
-#define is_exactly_of_type(OBJ,TYPE) \
- (typeid(OBJ)==typeid(some_##TYPE))
-*/
#define is_exactly_of_type(OBJ,TYPE) \
- ((OBJ).tinfo()==(some_##TYPE).tinfo())
-
-
- /*
-#else
-#define is_of_type(OBJ,TYPE) \
- (ASSERT(typeid(OBJ)!=typeid(exZERO())), \
- (dynamic_cast<TYPE *>(const_cast<basic *>(&OBJ))!=0))
-
-#define is_exactly_of_type(OBJ,TYPE) \
- (ASSERT(typeid(OBJ)!=typeid(exZERO())), \
- (typeid(OBJ)==typeid(some_##TYPE))
-#endif // ndef _DEBUG
-*/
+ ((OBJ).tinfo()==GiNaC::TINFO_##TYPE)
#define is_ex_of_type(OBJ,TYPE) \
- (dynamic_cast<TYPE *>(const_cast<basic *>((OBJ).bp))!=0)
+ (dynamic_cast<TYPE *>(const_cast<GiNaC::basic *>((OBJ).bp))!=0)
-/*
#define is_ex_exactly_of_type(OBJ,TYPE) \
- (typeid(*(OBJ).bp)==typeid(some_##TYPE))
-*/
+ ((*(OBJ).bp).tinfo()==GiNaC::TINFO_##TYPE)
-#define is_ex_exactly_of_type(OBJ,TYPE) \
- ((*(OBJ).bp).tinfo()==(some_##TYPE).tinfo())
-
-#define are_ex_trivially_equal(EX1,EX2) \
- ((EX1).bp==(EX2).bp)
// global functions
#endif
}
+} // namespace GiNaC
+
#endif // ndef __GINAC_BASIC_H__