Fixed doxygen warnings

release/4.3a0
Frank Dellaert 2011-09-07 01:16:35 +00:00
parent 76d45a2482
commit 918141f0f4
10 changed files with 84 additions and 43 deletions

View File

@ -24,7 +24,7 @@ namespace tensors {
/** A rank 1 tensor. Actually stores data. */
template<int N>
class Tensor1 {
double T[N];
double T[N]; ///< Storage
public:
@ -60,12 +60,13 @@ namespace tensors {
return T[i];
}
/* return an expression associated with an index */
template<char I> Tensor1Expression<Tensor1, Index<N, I> > operator()(Index<
N, I> index) const {
return Tensor1Expression<Tensor1, Index<N, I> > (*this);
/// return an expression associated with an index
template<char I> Tensor1Expression<Tensor1, Index<N, I> > operator()(
Index<N, I> index) const {
return Tensor1Expression<Tensor1, Index<N, I> >(*this);
}
}; // Tensor1
};
// Tensor1
} // namespace tensors
}// namespace tensors

View File

@ -43,9 +43,11 @@ namespace tensors {
A iter;
const double s;
public:
/// Constructor
TimesDouble_(const A &a, double s_) :
iter(a), s(s_) {
}
/// Element access
inline double operator()(int i) const {
return iter(i) * s;
}
@ -67,6 +69,7 @@ namespace tensors {
std::cout << "}" << std::endl;
}
/// equality
template<class B>
bool equals(const Tensor1Expression<B, I> & q, double tol) const {
for (int i = 0; i < I::dim; i++)
@ -82,6 +85,7 @@ namespace tensors {
return sqrt(sumsqr);
}
/// test equivalence
template<class B>
bool equivalent(const Tensor1Expression<B, I> & q, double tol = 1e-9) const {
return ((*this) * (1.0 / norm())).equals(q * (1.0 / q.norm()), tol)

View File

@ -25,7 +25,7 @@ namespace tensors {
template<int N1, int N2>
class Tensor2 {
protected:
Tensor1<N1> T[N2];
Tensor1<N1> T[N2]; ///< Storage
public:
@ -33,7 +33,7 @@ public:
Tensor2() {
}
/* construct from data - expressed in row major form */
/// construct from data - expressed in row major form
Tensor2(const double data[N2][N1]) {
for (int j = 0; j < N2; j++)
T[j] = Tensor1<N1> (data[j]);
@ -49,10 +49,12 @@ public:
/** dimension - TODO: is this right for anything other than 3x3? */
size_t dim() const {return N1 * N2;}
/// const element access
const double & operator()(int i, int j) const {
return T[j](i);
}
/// element access
double & operator()(int i, int j) {
return T[j](i);
}

View File

@ -39,7 +39,7 @@ namespace tensors {
const A iter;
public:
FixJ_(int j_, const A &a) :
j(j_), iter(a) {
j(j_), iter(a) {
}
double operator()(int i) const {
return iter(i, j);
@ -50,9 +50,11 @@ namespace tensors {
class Swap_ {
const A iter;
public:
/// Constructor
Swap_(const A &a) :
iter(a) {
iter(a) {
}
/// Element access
double operator()(int j, int i) const {
return iter(i, j);
}
@ -63,9 +65,11 @@ namespace tensors {
A iter;
const double s;
public:
/// Constructor
TimesDouble_(const A &a, double s_) :
iter(a), s(s_) {
iter(a), s(s_) {
}
/// Element access
inline double operator()(int i, int j) const {
return iter(i, j) * s;
}
@ -76,9 +80,11 @@ namespace tensors {
const This a;
const Tensor1Expression<B, I> b;
public:
/// Constructor
ITimesRank1_(const This &a_, const Tensor1Expression<B, I> &b_) :
a(a_), b(b_) {
a(a_), b(b_) {
}
/// Element access
double operator()(int j) const {
double sum = 0.0;
for (int i = 0; i < I::dim; i++)
@ -92,9 +98,11 @@ namespace tensors {
const This a;
const Tensor1Expression<B, J> b;
public:
/// Constructor
JTimesRank1_(const This &a_, const Tensor1Expression<B, J> &b_) :
a(a_), b(b_) {
a(a_), b(b_) {
}
/// Element access
double operator()(int i) const {
double sum = 0.0;
for (int j = 0; j < J::dim; j++)
@ -108,9 +116,11 @@ namespace tensors {
const This a;
const Tensor2Expression<B, I, K> b;
public:
/// Constructor
ITimesRank2_(const This &a_, const Tensor2Expression<B, I, K> &b_) :
a(a_), b(b_) {
a(a_), b(b_) {
}
/// Element access
double operator()(int j, int k) const {
double sum = 0.0;
for (int i = 0; i < I::dim; i++)
@ -123,7 +133,7 @@ namespace tensors {
/** constructor */
Tensor2Expression(const A &a) :
iter(a) {
iter(a) {
}
/** Print */
@ -137,10 +147,12 @@ namespace tensors {
std::cout << "}" << std::endl;
}
/// test equality
template<class B>
bool equals(const Tensor2Expression<B, I, J> & q, double tol) const {
for (int j = 0; j < J::dim; j++)
if (!(*this)(j).equals(q(j), tol)) return false;
if (!(*this)(j).equals(q(j), tol))
return false;
return true;
}
@ -149,14 +161,15 @@ namespace tensors {
double sumsqr = 0.0;
for (int i = 0; i < I::dim; i++)
for (int j = 0; j < J::dim; j++)
sumsqr += iter(i,j) * iter(i,j);
sumsqr += iter(i, j) * iter(i, j);
return sqrt(sumsqr);
}
/// test equivalence
template<class B>
bool equivalent(const Tensor2Expression<B, I, J> & q, double tol) const {
return ((*this) * (1.0 / norm())).equals(q * (1.0 / q.norm()), tol)
|| ((*this) * (-1.0 / norm())).equals(q * (1.0 / q.norm()), tol);
|| ((*this) * (-1.0 / norm())).equals(q * (1.0 / q.norm()), tol);
}
/** element access */
@ -166,6 +179,7 @@ namespace tensors {
/** swap indices */
typedef Tensor2Expression<Swap_, J, I> Swapped;
/// Return Swap_ helper class
Swapped swap() {
return Swap_(iter);
}
@ -185,32 +199,34 @@ namespace tensors {
bool operator==(const Tensor2Expression<B, I, J>& T) const {
for (int i = 0; i < I::dim; i++)
for (int j = 0; j < J::dim; j++)
if (iter(i, j) != T(i, j)) return false;
if (iter(i, j) != T(i, j))
return false;
return true;
}
/** c(j) = a(i,j)*b(i) */
template<class B>
inline Tensor1Expression<ITimesRank1_<B> , J> operator*(
inline Tensor1Expression<ITimesRank1_<B>, J> operator*(
const Tensor1Expression<B, I>& p) {
return ITimesRank1_<B> (*this, p);
return ITimesRank1_<B>(*this, p);
}
/** c(i) = a(i,j)*b(j) */
template<class B>
inline Tensor1Expression<JTimesRank1_<B> , I> operator*(
inline Tensor1Expression<JTimesRank1_<B>, I> operator*(
const Tensor1Expression<B, J> &p) {
return JTimesRank1_<B> (*this, p);
return JTimesRank1_<B>(*this, p);
}
/** c(j,k) = a(i,j)*T(i,k) */
template<class B, class K>
inline Tensor2Expression<ITimesRank2_<B, K> , J, K> operator*(
const Tensor2Expression<B, I, K>& p) {
return ITimesRank2_<B, K> (*this, p);
return ITimesRank2_<B, K>(*this, p);
}
}; // Tensor2Expression
};
// Tensor2Expression
/** Print */
template<class A, class I, class J>
@ -224,10 +240,12 @@ namespace tensors {
const Tensor1Expression<A, I> iterA;
const Tensor1Expression<B, J> iterB;
public:
/// Constructor
Rank1Rank1_(const Tensor1Expression<A, I> &a,
const Tensor1Expression<B, J> &b) :
iterA(a), iterB(b) {
const Tensor1Expression<B, J> &b) :
iterA(a), iterB(b) {
}
/// element access
double operator()(int i, int j) const {
return iterA(i) * iterB(j);
}
@ -237,7 +255,7 @@ namespace tensors {
template<class A, class I, class B, class J>
inline Tensor2Expression<Rank1Rank1_<A, I, B, J> , I, J> operator*(
const Tensor1Expression<A, I> &a, const Tensor1Expression<B, J> &b) {
return Rank1Rank1_<A, I, B, J> (a, b);
return Rank1Rank1_<A, I, B, J>(a, b);
}
/**
@ -245,8 +263,9 @@ namespace tensors {
*/
template<class A, class B, class I, class J>
bool assert_equality(const Tensor2Expression<A, I, J>& expected,
const Tensor2Expression<B, I, J>& actual, double tol = 1e-9) {
if (actual.equals(expected, tol)) return true;
const Tensor2Expression<B, I, J>& actual, double tol = 1e-9) {
if (actual.equals(expected, tol))
return true;
std::cout << "Not equal:\n";
expected.print("expected:\n");
actual.print("actual:\n");
@ -258,8 +277,9 @@ namespace tensors {
*/
template<class A, class B, class I, class J>
bool assert_equivalent(const Tensor2Expression<A, I, J>& expected,
const Tensor2Expression<B, I, J>& actual, double tol = 1e-9) {
if (actual.equivalent(expected, tol)) return true;
const Tensor2Expression<B, I, J>& actual, double tol = 1e-9) {
if (actual.equivalent(expected, tol))
return true;
std::cout << "Not equal:\n";
expected.print("expected:\n");
actual.print("actual:\n");

View File

@ -24,7 +24,7 @@ namespace tensors {
/** Rank 3 Tensor */
template<int N1, int N2, int N3>
class Tensor3 {
Tensor2<N1, N2> T[N3];
Tensor2<N1, N2> T[N3]; ///< Storage
public:
@ -46,6 +46,7 @@ namespace tensors {
T[k] = a(k);
}
/// element access
double operator()(int i, int j, int k) const {
return T[k](i, j);
}

View File

@ -77,6 +77,7 @@ namespace tensors {
std::cout << "}" << std::endl;
}
/// test equality
template<class B>
bool equals(const Tensor3Expression<B, I, J, K> & q, double tol) const {
for (int k = 0; k < K::dim; k++)
@ -118,9 +119,11 @@ namespace tensors {
const Rank2 iterA;
const Rank1 iterB;
public:
/// Constructor
Rank2Rank1_(const Rank2 &a, const Rank1 &b) :
iterA(a), iterB(b) {
}
/// Element access
double operator()(int i, int j, int k) const {
return iterA(i, j) * iterB(k);
}
@ -141,9 +144,11 @@ namespace tensors {
const Rank1 iterA;
const Rank2 iterB;
public:
/// Constructor
Rank1Rank2_(const Rank1 &a, const Rank2 &b) :
iterA(a), iterB(b) {
}
/// Element access
double operator()(int i, int j, int k) const {
return iterA(i) * iterB(j, k);
}

View File

@ -27,7 +27,7 @@ namespace tensors {
private:
Tensor3<N1, N2, N3> T[N4];
Tensor3<N1, N2, N3> T[N4]; ///< Storage
public:
@ -35,6 +35,7 @@ namespace tensors {
Tensor4() {
}
/// element access
double operator()(int i, int j, int k, int l) const {
return T[l](i, j, k);
}

View File

@ -27,7 +27,7 @@ namespace tensors {
private:
Tensor4<N1, N2, N3, N4> T[N5];
Tensor4<N1, N2, N3, N4> T[N5]; ///< Storage
public:
@ -43,6 +43,7 @@ namespace tensors {
T[m] = a(m);
}
/// element access
double operator()(int i, int j, int k, int l, int m) const {
return T[m](i, j, k, l);
}

View File

@ -33,9 +33,11 @@ namespace tensors {
class Swap34_ {
const A iter;
public:
/// Constructor
Swap34_(const A &a) :
iter(a) {
iter(a) {
}
/// swapping element access
double operator()(int i, int j, int k, int l, int m) const {
return iter(i, j, l, k, m);
}
@ -45,7 +47,7 @@ namespace tensors {
/** constructor */
Tensor5Expression(const A &a) :
iter(a) {
iter(a) {
}
/** Print */
@ -67,6 +69,7 @@ namespace tensors {
/** swap indices */
typedef Tensor5Expression<Swap34_, I, J, L, K, M> Swapped;
/// create Swap34_ helper class
Swapped swap34() {
return Swap34_(iter);
}
@ -76,12 +79,13 @@ namespace tensors {
return iter(i, j, k, l, m);
}
}; // Tensor5Expression
};
// Tensor5Expression
/** Print */
template<class A, class I, class J, class K, class L, class M>
void print(const Tensor5Expression<A, I, J, K, L, M>& T,
const std::string& s = "Tensor5:") {
const std::string& s = "Tensor5:") {
T.print(s);
}
@ -93,9 +97,11 @@ namespace tensors {
const Rank3 iterA;
const Rank2 iterB;
public:
/// Constructor
Rank3Rank2_(const Rank3 &a, const Rank2 &b) :
iterA(a), iterB(b) {
iterA(a), iterB(b) {
}
/// Element access
double operator()(int i, int j, int k, int l, int m) const {
return iterA(i, j, k) * iterB(l, m);
}
@ -106,7 +112,7 @@ namespace tensors {
inline Tensor5Expression<Rank3Rank2_<A, I, J, K, B, L, M> , I, J, K, L, M> operator*(
const Tensor3Expression<A, I, J, K>& a,
const Tensor2Expression<B, L, M> &b) {
return Rank3Rank2_<A, I, J, K, B, L, M> (a, b);
return Rank3Rank2_<A, I, J, K, B, L, M>(a, b);
}
} // namespace tensors

View File

@ -22,7 +22,7 @@ namespace tensors {
/** index */
template<int Dim, char C> struct Index {
static const int dim = Dim;
static const int dim = Dim; ///< dimension
};
} // namespace tensors