casacore
Loading...
Searching...
No Matches
SparseDiffRep.h
Go to the documentation of this file.
1//# SparseDiffRep.h: Representation of an automatic differential class data
2//# Copyright (C) 2007
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//#
27//# $Id: SparseDiffRep.h,v 1.1 2007/11/16 04:34:46 wbrouw Exp $
28
29#ifndef SCIMATH_SPARSEDIFFREP_H
30#define SCIMATH_SPARSEDIFFREP_H
31
32//# Includes
33#include <casacore/casa/aips.h>
34#include <casacore/casa/vector.h>
35#include <utility>
36
37// Using
38using std::pair;
39
40namespace casacore { //# NAMESPACE CASACORE - BEGIN
41
42 //# Forward declarations
43
44 // <summary>
45 // Representation of data for the spare automatic differentiation calss.
46 // </summary>
47 //
48 // <use visibility=local>
49 //
50 // <reviewed reviewer="UNKNOWN" date="" tests="tSparseDiff.cc" demos="">
51 // </reviewed>
52 //
53 // <prerequisite>
54 // <li> <linkto class=SparseDiff>SparseDiff</linkto>
55 // </prerequisite>
56 //
57 // <etymology>
58 // Class that represents partial derivatives obtained by automatic
59 // differentiation.
60 // </etymology>
61 //
62 // <synopsis>
63 // Class representing
64 // the data necessary for automatic differentiation. The structure contains a
65 // value, and the derivatives of the value with respect to a number of
66 // dependent variables.
67 //
68 // The actual differentiation and access is done through the
69 // <linkto class=SparseDiff>SparseDiff</linkto> class.
70 //
71 // <example>
72 // See the example in <linkto class=SparseDiff>SparseDiff</linkto>
73 // </example>
74 //
75 // <motivation>
76 // To separate the data container from the actual calculations.
77 // To be able to create special conatiners; constructors and destructors
78 // (including memory allocation) to speed up processes.
79 //
80 // <templating arg=T>
81 // <li> any class that has the standard mathematical and comparison
82 // operators defined
83 // </templating>
84 //
85 // <todo asof="2007/11/27">
86 // <li> Nothing I know of
87 // </todo>
88
89 template <class T> class SparseDiffRep {
90 public:
91 //# Typedefs
92 typedef T value_type;
96 typedef const value_type* const_iterator;
97
98 //# Constructors
99 // Construct a constant with a value of zero. Zero derivatives.
101
102 //# Operators
103 // Assignment operators
104 // <group>
106 SparseDiffRep<T> &operator=(const vector<pair<uInt, T> > &grad);
108 void operator*=(const T other);
109 void operator/=(const T other);
110 void operator+=(const T other);
111 void operator-=(const T other);
112 // </group>
113
114 //# Member functions
115
116 // Clear for reuse
117 void clear() { grad_p.clear(); }
118
119 //# Data
120 // The function value
122 // The derivatives
123 vector<pair<uInt, T> > grad_p;
124 // Link to indicate its status (1=linked in stack; 2=used in modules)
126 };
127
128
129} //# NAMESPACE CASACORE - END
130
131#ifndef CASACORE_NO_AUTO_TEMPLATES
132#include <casacore/scimath/Mathematics/SparseDiffRep.tcc>
133#endif //# CASACORE_NO_AUTO_TEMPLATES
134#endif
uInt link_p
Link to indicate its status (1=linked in stack; 2=used in modules)
void clear()
Clear for reuse.
SparseDiffRep< T > & operator=(const SparseDiffRep< T > &other)
vector< pair< uInt, T > > grad_p
The derivatives.
void operator*=(const T other)
const value_type * const_iterator
SparseDiffRep()
Construct a constant with a value of zero.
void operator-=(const T other)
void operator/=(const T other)
const value_type & const_reference
SparseDiffRep< T > & operator=(const T &v)
Assignment operators.
SparseDiffRep< T > & operator=(const vector< pair< uInt, T > > &grad)
T val_p
The function value.
void operator+=(const T other)
this file contains all the compiler specific defines
Definition mainpage.dox:28
unsigned int uInt
Definition aipstype.h:51