[clug] Code "rework/rewrite" tools.
Andrew Janke
a.janke at gmail.com
Tue Jan 20 22:55:29 GMT 2009
Sitrep: I "inherited" the job of maintaining a bunch of code a while
back. It is C++ code from years back and is spread across a library
(or two) and the main "doover". Of course in the latest Debian/Ubuntu
things go wonky due to the (older) way in which templates and operator
overloading are used. Even judicious use of -frepo doesn't help me
here. :(
So I am faced with the (erky) prospect of re-writing the sections of
it that matter and thus the question...
Does anyone know of a tool that allows you to "weed" a library down to
just what is used? At least then I could concentrate my work on the
bits that matter as compared to fixing/updating the whole thing. The
code dates back to 1992, so it is at times a bit "interesting" (see
below for an example).
ta
a
PS + eg:
Here is an example of what is going on/down (-DUSE_DBLMAT is defined)
From: Matrix.h
template <class Type> class Mat;
...
#ifdef USE_DBLMAT
//Converts Mat<Type> to Mat<double>
typedef Mat<double> DblMat;
template <class Type> Mat<double> asDblMat(const Mat<Type>&);
#endif
#ifdef USE_FLMAT
//Converts Mat<Type> to Mat<float>
typedef Mat<float> FlMat;
template <class Type> Mat<float> asFlMat(const Mat<Type>&);
#endif
...
template <class T1, class T2>
Mat<T1>& operator += (Mat<T1>& A, const Mat<T2>& B);
...
From: Matrix.cc
template <class T1, class T2>
Mat<T1>& operator += (Mat<T1>& A, const Mat<T2>& B)
{
unsigned nrows = A.getrows();
unsigned ncols = A.getcols();
if (!(A.isvector() && B.isvector() && (A.length() == B.length())) &&
((B.getrows() != nrows) || (B.getcols() != ncols))) {
cerr << "Matrices of incompatible sizes for +=" << endl;
return A;
}
T1 *aPtr = (T1 *) A.getEl()[0];
const T2 *bPtr = B.getEl()[0];
for (unsigned i = nrows; i; i--)
for (unsigned j = ncols; j; j--)
*aPtr++ += (T1) *bPtr++;
return A;
}
...
Now I think that for example the += overload should be this for a start:
template <class T1>
T1 & Mat<T1>::operator+=(const Mat<T1>& rhs);
Ideally I would just remove all the type templating (-DUSE_DBLMAT) as
only the DBLMAT version is ever used and as far as I am aware this
library isn't used anywhere else! :)
More information about the linux
mailing list