22#ifndef _nmrPolynomialContainer_h
23#define _nmrPolynomialContainer_h
27#define MAP_CONTAINER 1
28#define LIST_CONTAINER 2
29#define CONTAINER_TYPE LIST_CONTAINER
31#if (CONTAINER_TYPE == MAP_CONTAINER)
33#elif (CONTAINER_TYPE == LIST_CONTAINER)
58template<
class _TermInfo>
66#if (CONTAINER_TYPE == MAP_CONTAINER)
68#elif (CONTAINER_TYPE == LIST_CONTAINER)
73 typedef typename TermContainerType::value_type
TermType;
78#if (CONTAINER_TYPE == LIST_CONTAINER)
93 return (Target.Compare(element.first) == 0);
113 return (Target.Compare(element.first) <= 0);
123 :
BaseType(numVariables, minDegree, maxDegree)
139 return Terms.empty();
146 throw std::runtime_error(
"nmrPolynomialContainer: Attempt to set the min degree higher than max");
155 if (newMin > firstDegree) {
156 throw std::runtime_error(
"nmrPolynomialContainer: Attempt to set the min degree above existing term");
165 throw std::runtime_error(
"nmrPolynomialContainer: Attempt to set the max degree lower than min");
174 if (newMax < lastDegree) {
175 throw std::runtime_error(
"nmrPolynomialContainer: Attempt to set the max degree below existing term");
199#if (CONTAINER_TYPE == MAP_CONTAINER)
201#elif (CONTAINER_TYPE == LIST_CONTAINER)
202 return std::find_if(
Terms.begin(),
Terms.end(), EqualityTester(target)) !=
Terms.end();
219 for (; termIterator != endTermIterator; ++termIterator) {
220 if ( (termIterator->first).Compare(term) == 0 ) {
235 for (; (index < position) && (result != endTermIterator); ++index, ++result)
243 {
return Terms.begin(); }
245 {
return Terms.begin(); }
250 {
return Terms.end(); }
252 {
return Terms.end(); }
258#if (CONTAINER_TYPE == MAP_CONTAINER)
259 return Terms.find(target);
260#elif (CONTAINER_TYPE == LIST_CONTAINER)
261 return std::find_if(
Terms.begin(),
Terms.end(), EqualityTester(target));
266#if (CONTAINER_TYPE == MAP_CONTAINER)
267 return Terms.find(target);
268#elif (CONTAINER_TYPE == LIST_CONTAINER)
269 return std::find_if(
Terms.begin(),
Terms.end(), EqualityTester(target));
311 int coefficientIndex = 0;
312 for (; termIterator !=
EndTermIterator(); ++termIterator, ++coefficientIndex) {
322 int coefficientIndex = 0;
323 for (; termIterator !=
EndTermIterator(); ++termIterator, ++coefficientIndex) {
329 {
return where->first; }
331 {
return where->first; }
333#if INCLUDE_DEPRECATED_POLYNOMIAL_CODE
338 ValueType
EvaluateBasis(
const TermConstIteratorType & where)
const
342 ValueType
EvaluateBasis(
const TermIteratorType & where)
const
379 while (termIt != endIt) {
395 for (; termIt != endIt; ++termIt, ++valuePtr) {
410 for (; termIt != endIt; ++termIt, ++coefficientIndex) {
411 polyVal += BaseType::EvaluateTerm(termIt->first,
412 variables, *coefficientIndex);
423 for (; termIt != endIt; ++termIt) {
438#if DEFINE_FORMATTED_OUTPUT
439 virtual char * Format(
char * buffer)
const
443 while (termIterator != endIterator) {
445 buffer += strlen(buffer);
446 sprintf(buffer,
"{");
447 buffer+=strlen(buffer);
449 sprintf(buffer,
"}\n");
450 buffer += strlen(buffer);
489 output.write( (
const char *)&numTerms,
sizeof(numTerms));
507 input.read( (
char *)&numTermsLeft,
sizeof(numTermsLeft));
508 for (; numTermsLeft > 0; --numTermsLeft) {
512#if (CONTAINER_TYPE == MAP_CONTAINER)
513 Container[termIndex] = termInfo;
514#elif (CONTAINER_TYPE == LIST_CONTAINER)
528 return termIterator->second;
534 return termIterator->second;
Definition nmrMultiVariablePowerBasis.h:38
PowerType MinDegree
Definition nmrPolynomialBase.h:432
PowerType MaxDegree
Definition nmrPolynomialBase.h:433
virtual void SerializeRaw(std::ostream &output) const
nmrPolynomialTermPowerIndex::MultinomialCoefficientType TermCounterType
Definition nmrPolynomialBase.h:59
VariableIndexType GetNumVariables() const
Definition nmrPolynomialBase.h:69
nmrPolynomialTermPowerIndex::PowerType PowerType
Definition nmrPolynomialBase.h:58
virtual void DeserializeRaw(std::istream &input)
double ValueType
Definition nmrPolynomialBase.h:54
double CoefficientType
Definition nmrPolynomialBase.h:56
PowerType GetMinDegree() const
Definition nmrPolynomialBase.h:74
nmrPolynomialTermPowerIndex::VariableIndexType VariableIndexType
Definition nmrPolynomialBase.h:57
InsertStatus
Definition nmrPolynomialBase.h:61
PowerType GetMaxDegree() const
Definition nmrPolynomialBase.h:79
nmrPolynomialBase(VariableIndexType numVariables, PowerType minDegree, PowerType maxDegree)
EqualityTester(const nmrPolynomialTermPowerIndex &target)
Definition nmrPolynomialContainer.h:87
LessOrEqualityTester(const nmrPolynomialTermPowerIndex &target)
Definition nmrPolynomialContainer.h:107
virtual void RestoreCoefficients(const CoefficientType source[])
Definition nmrPolynomialContainer.h:319
ValueType EvaluateTerm(const TermConstIteratorType &where, const nmrMultiVariablePowerBasis &variables) const
Definition nmrPolynomialContainer.h:361
virtual ValueType Evaluate(const nmrMultiVariablePowerBasis &variables) const
Definition nmrPolynomialContainer.h:373
virtual void Clear()
Definition nmrPolynomialContainer.h:291
TermIteratorType FindTerm(const nmrPolynomialTermPowerIndex &target)
Definition nmrPolynomialContainer.h:256
virtual void FillAllTerms()
Definition nmrPolynomialContainer.h:182
virtual TermCounterType GetIndexPosition(const nmrPolynomialTermPowerIndex &term) const
Definition nmrPolynomialContainer.h:210
virtual void SetMinDegree(PowerType newMin) CISST_THROW(std
Definition nmrPolynomialContainer.h:143
const TermInfoType & GetTermInfo(const TermConstIteratorType &termIterator) const
Definition nmrPolynomialContainer.h:525
TermContainerType::iterator TermIteratorType
Definition nmrPolynomialContainer.h:74
virtual void DeserializeRaw(std::istream &input)
Definition nmrPolynomialContainer.h:502
virtual bool IncludesIndex(const nmrPolynomialTermPowerIndex &target) const
Definition nmrPolynomialContainer.h:197
virtual void CollectCoefficients(CoefficientType target[]) const
Definition nmrPolynomialContainer.h:308
ValueType EvaluateTerm(const TermConstIteratorType &where) const
Definition nmrPolynomialContainer.h:353
TermIteratorType EndTermIterator()
Definition nmrPolynomialContainer.h:249
virtual ValueType EvaluateBasis(const TermIteratorType &where, const nmrMultiVariablePowerBasis &variables) const =0
TermInfoType & GetTermInfo(const TermConstIteratorType &termIterator)
Definition nmrPolynomialContainer.h:531
virtual InsertStatus SetCoefficient(const nmrPolynomialTermPowerIndex &where, CoefficientType coefficient)=0
TermConstIteratorType FirstTermIterator() const
Definition nmrPolynomialContainer.h:244
virtual void RemoveTerm(const nmrPolynomialTermPowerIndex &where)
Definition nmrPolynomialContainer.h:276
virtual InsertStatus SetCoefficient(TermIteratorType &where, CoefficientType coefficient)=0
TermContainerType::value_type TermType
Definition nmrPolynomialContainer.h:73
nmrPolynomialContainer(VariableIndexType numVariables, PowerType minDegree, PowerType maxDegree)
Definition nmrPolynomialContainer.h:122
virtual void SetMaxDegree(PowerType newMax) CISST_THROW(std
Definition nmrPolynomialContainer.h:162
TermContainerType Terms
Definition nmrPolynomialContainer.h:523
ValueType EvaluateTerm(const TermIteratorType &where, const nmrMultiVariablePowerBasis &variables) const
Definition nmrPolynomialContainer.h:366
virtual void AddConstantToCoefficients(CoefficientType coefficients[], CoefficientType shiftAmount) const =0
virtual void AddConstant(CoefficientType shiftAmount)=0
virtual ~nmrPolynomialContainer()
Definition nmrPolynomialContainer.h:126
TermConstIteratorType EndTermIterator() const
Definition nmrPolynomialContainer.h:251
virtual ValueType EvaluateForCoefficients(const nmrMultiVariablePowerBasis &variables, const CoefficientType coefficients[]) const
Definition nmrPolynomialContainer.h:401
virtual bool IsEmpty() const
Definition nmrPolynomialContainer.h:137
virtual void RemoveTerm(TermIteratorType &where)
Definition nmrPolynomialContainer.h:286
virtual void DeserializeTermInfo(std::istream &input, TermIteratorType &termIterator)=0
virtual void Scale(CoefficientType scaleFactor)
Definition nmrPolynomialContainer.h:419
TermIteratorType GetTermIteratorForPosition(TermCounterType position)
Definition nmrPolynomialContainer.h:230
virtual void SerializeTermInfo(std::ostream &output, const TermConstIteratorType &termIterator) const =0
virtual void SerializeRaw(std::ostream &output) const
Definition nmrPolynomialContainer.h:485
ValueType EvaluateTerm(const TermIteratorType &where) const
Definition nmrPolynomialContainer.h:357
TermContainerType::const_iterator TermConstIteratorType
Definition nmrPolynomialContainer.h:75
const nmrPolynomialTermPowerIndex & GetTermPowerIndex(const TermIteratorType &where) const
Definition nmrPolynomialContainer.h:330
void * TermInfoType
Definition nmrPolynomialContainer.h:64
virtual ValueType EvaluateBasis(const TermConstIteratorType &where, const nmrMultiVariablePowerBasis &variables) const =0
TermConstIteratorType FindTerm(const nmrPolynomialTermPowerIndex &target) const
Definition nmrPolynomialContainer.h:264
const nmrPolynomialTermPowerIndex & GetTermPowerIndex(const TermConstIteratorType &where) const
Definition nmrPolynomialContainer.h:328
virtual CoefficientType GetCoefficient(const TermConstIteratorType &where) const =0
TermIteratorType FirstTermIterator()
Definition nmrPolynomialContainer.h:242
virtual CoefficientType GetCoefficient(const TermIteratorType &where) const =0
std::list< ContainerElementType > TermContainerType
Definition nmrPolynomialContainer.h:70
std::pair< nmrPolynomialTermPowerIndex, TermInfoType > ContainerElementType
Definition nmrPolynomialContainer.h:69
virtual TermCounterType GetNumberOfTerms() const
Definition nmrPolynomialContainer.h:131
virtual void EvaluateBasisVector(const nmrMultiVariablePowerBasis &variables, ValueType termBaseValues[]) const
Definition nmrPolynomialContainer.h:388
nmrPolynomialBase BaseType
Definition nmrPolynomialContainer.h:62
Represents the power index of a single term in a multi-variable polynomial.
Definition nmrPolynomialTermPowerIndex.h:90
int GetDegree() const
Definition nmrPolynomialTermPowerIndex.h:121
bool IsValid() const
Definition nmrPolynomialTermPowerIndex.h:161
void DeserializeIndexRaw(std::istream &input)
#define CISST_EXPORT
Definition cmnExportMacros.h:50
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
virtual ValueType EvaluateBasis(const nmrPolynomialTermPowerIndex &where, const nmrMultiVariablePowerBasis &variables) const
const_reference operator()(size_type rowIndex, size_type colIndex) const CISST_THROW(std
Definition vctDynamicConstMatrixBase.h:352