>Your "-c -p" suggests your box.H is too complicate for CINT built-in CPP
>macro processing features.
>
>Can you show the source of that Box.H ?
Box.H invokes a bunch of others:
#ifndef _BoxH_
#define _BoxH_
#include <BoxLow.H>
#include <Ascalar.H>
#include <common.H>
#include <MixedOps.H>
#include <Each.H>
#include <Matrix.H>
#include <Scalar.H>
#endif
----------------
The class Box is actually defined in BoxLow.H
Let me quote a few definition in that file. It is very long.
So, I just picked out those things that I think may be hard for
Cint to handle. (I got the impression before that Cint does not handle
template well.)
class Lvalue { // Note: Bx is defined in Bx.H
public:
Bx **x,*ix;
Lvalue(Bx **x,Bx *ix):x(x),ix(ix) { Lvalue::ix->ref(); }
Lvalue(const Lvalue& cpLvalue): x(cpLvalue.x), ix(cpLvalue.ix) { ix->ref(); }
~Lvalue() { if(0 == ix->deref() ) delete ix; }
Bx *operator=(Box rhsBox);
Bx *operator=(Lvalue rhsLvalue);
};
class Box {
public:
// Weird stuff to handle indexing in a syntactically clean way
Box(Lvalue v):bx((*v.x)->Use(v.ix)) {}
// If operator int**() is defined then SunPro C++ will call it rather
// than operator bool() if a Box-valued expression appears as a condition.
// This rarely, if ever, gives a sensible result.
#if 0
operator int **() {return (int **)bx;}
#endif
Lvalue operator()(Box ix);
// skip......
/// Construct a rank-1 (vector) box of the given type and length:
Box(BxElementType type, int length) : bx(new Bx(type, length, 0)) {}
// ...
/* Copy constructor */
Box(const Box& x):bx(x.bx) {x.bx->ref();}
Box(NaN_Type n) : bx(new Bx(double(n))) {}
Box Cvt(int type, bool support_more_types=false) const {return
Box(bx->Cvt(BxElementType(type), support_more_types));}
KeyMap **GetKeyMaps() {return bx->GetKeyMaps();}
// template versions to avoid taking cases all the time, like with Bx
template <class BoxFunctor>
typename BoxFunctor::result_type readDispatch(BoxFunctor bf) const {
typedef typename BoxFunctor::result_type ReturnType;
switch (Type()) {
case ET_PNTR: return bf(this, ReadBoxes());
case ET_DOUBLE: return bf(this, ReadDoubles());
case ET_INT: return bf(this, ReadInts());
case ET_CHAR: return bf(this, ReadChars());
default: fault;
}
return ReturnType();
}
const TempBoxForBracket operator[](Box indexBox);
inline const TempBoxForBracket operator[](const char* pcch); // 281FIX
inline Bx * Lvalue::operator=(Lvalue rhsLvalue){
return operator=(Box(rhsLvalue));
long Serialize(GFile *gf) const {return bx->Serialize(gf);}
--------------------------------------------------------
What do you think ?
Is there any hope in accessing Box from within Cint ???
btw, how does Cint recognize all the classes in ROOT ?
for example, is there a LinkDef.h file for TTree class ??
--HP
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET