Factor: improve factor multiplication

Pass the argument as reference-to-const and also allow chaining of multiplications.
This commit is contained in:
Tiago Gomes 2013-03-21 21:49:12 +00:00
parent 6da2580c8f
commit a2e54a235a
4 changed files with 11 additions and 8 deletions

View File

@ -91,14 +91,16 @@ Factor::sumOutAllExceptIndex (size_t idx)
} }
void
Factor::multiply (Factor& g) Factor&
Factor::multiply (const Factor& g)
{ {
if (args_.empty()) { if (args_.empty()) {
*this = g; operator= (g);
} else { } else {
GenericFactor<VarId>::multiply (g); GenericFactor<VarId>::multiply (g);
} }
return *this;
} }

View File

@ -30,7 +30,7 @@ class Factor : public GenericFactor<VarId> {
void sumOutAllExceptIndex (size_t idx); void sumOutAllExceptIndex (size_t idx);
void multiply (Factor&); Factor& multiply (const Factor&);
std::string getLabel() const; std::string getLabel() const;

View File

@ -82,15 +82,15 @@ GenericFactor<T>::operator[] (size_t idx)
template <typename T> void template <typename T> GenericFactor<T>&
GenericFactor<T>::multiply (GenericFactor<T>& g) GenericFactor<T>::multiply (const GenericFactor<T>& g)
{ {
if (args_ == g.arguments()) { if (args_ == g.arguments()) {
// optimization // optimization
Globals::logDomain Globals::logDomain
? params_ += g.params() ? params_ += g.params()
: params_ *= g.params(); : params_ *= g.params();
return; return *this;
} }
unsigned range_prod = 1; unsigned range_prod = 1;
bool share_arguments = false; bool share_arguments = false;
@ -124,6 +124,7 @@ GenericFactor<T>::multiply (GenericFactor<T>& g)
} }
} }
} }
return *this;
} }

View File

@ -49,7 +49,7 @@ class GenericFactor {
double& operator[] (size_t idx); double& operator[] (size_t idx);
void multiply (GenericFactor<T>& g); GenericFactor<T>& multiply (const GenericFactor<T>& g);
void sumOutIndex (size_t idx); void sumOutIndex (size_t idx);