Re-factored append_factor to use FOREACH_PAIR
							parent
							
								
									e98081f92c
								
							
						
					
					
						commit
						2a4e90a283
					
				|  | @ -244,35 +244,29 @@ GaussianFactor::sparse(const Ordering& ordering, const Dimensions& variables) co | |||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
| void GaussianFactor::append_factor(GaussianFactor::shared_ptr f, const size_t m, | ||||
| 		const size_t pos) { | ||||
| 	bool verbose = false; | ||||
| 	if (verbose) cout << "GaussianFactor::append_factor" << endl; | ||||
| void GaussianFactor::append_factor(GaussianFactor::shared_ptr f, size_t m, size_t pos) { | ||||
| 
 | ||||
| 	// iterate over all matrices from the factor f
 | ||||
| 	GaussianFactor::const_iterator it = f->begin(); | ||||
| 	for (; it != f->end(); it++) { | ||||
| 		string key = it->first; | ||||
| 
 | ||||
| 		// find rows and columns
 | ||||
| 		const size_t mrhs = it->second.size1(), n = it->second.size2(); | ||||
| 	string key; Matrix A; | ||||
| 	FOREACH_PAIR( key, A, f->As_) { | ||||
| 
 | ||||
| 		// find the corresponding matrix among As
 | ||||
| 		iterator mine = As_.find(key); | ||||
| 		const bool exists = mine != As_.end(); | ||||
| 
 | ||||
| 		// create the matrix or use existing
 | ||||
| 		if(exists) { | ||||
| 		  copy(it->second.data().begin(), it->second.data().end(), (mine->second).data().begin()+pos*n); | ||||
| 		} | ||||
| 		// find rows and columns
 | ||||
| 		const size_t n = A.size2(); | ||||
| 
 | ||||
| 		// use existing or create new matrix
 | ||||
| 		if (exists) | ||||
| 		  copy(A.data().begin(), A.data().end(), (mine->second).data().begin()+pos*n); | ||||
| 		else { | ||||
| 			Matrix Z = zeros(m, n); | ||||
| 			copy(it->second.data().begin(), it->second.data().end(), Z.data().begin()+pos*n); | ||||
| 			copy(A.data().begin(), A.data().end(), Z.data().begin()+pos*n); | ||||
| 			insert(key, Z); | ||||
| 		} | ||||
| 	} | ||||
| 	if (verbose) cout << "GaussianFactor::append_factor done" << endl; | ||||
| 
 | ||||
| 	} // FOREACH
 | ||||
| } | ||||
| 
 | ||||
| /* ************************************************************************* */ | ||||
|  |  | |||
|  | @ -241,8 +241,7 @@ public: | |||
| 	 * @param m final number of rows of f, needs to be known in advance | ||||
| 	 * @param pos where to insert in the m-sized matrices | ||||
| 	 */ | ||||
| 	inline void append_factor(GaussianFactor::shared_ptr f, const size_t m, | ||||
| 			const size_t pos); | ||||
| 	inline void append_factor(GaussianFactor::shared_ptr f, size_t m, size_t pos); | ||||
| 
 | ||||
| }; // GaussianFactor
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue