VectorValues constructor and append with initial values
							parent
							
								
									d1de6b29a9
								
							
						
					
					
						commit
						587bfd3772
					
				| 
						 | 
				
			
			@ -179,6 +179,12 @@ namespace gtsam {
 | 
			
		|||
    template<class CONTAINER>
 | 
			
		||||
    explicit VectorValues(const CONTAINER& dimensions) { this->append(dimensions); }
 | 
			
		||||
 | 
			
		||||
    /** Construct from a container of variable dimensions (in variable order), with initial values. */
 | 
			
		||||
    template<class CONTAINER>
 | 
			
		||||
    explicit VectorValues(const Vector& d, const CONTAINER& dimensions) {
 | 
			
		||||
      this->append(d, dimensions);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** Construct to hold nVars vectors of varDim dimension each. */
 | 
			
		||||
    VectorValues(Index nVars, size_t varDim) { this->resize(nVars, varDim); }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -237,6 +243,19 @@ namespace gtsam {
 | 
			
		|||
    template<class CONTAINER>
 | 
			
		||||
    void append(const CONTAINER& dimensions);
 | 
			
		||||
 | 
			
		||||
    /** Append to the VectorValues to additionally contain variables of the
 | 
			
		||||
     * dimensions stored in \c dimensions.  Initial values for the new variables
 | 
			
		||||
     * are extracted from the input vector, holding values for all components
 | 
			
		||||
     * in the same order specified in the dimensions container.
 | 
			
		||||
     * This function preserves the original data, so all previously-existing
 | 
			
		||||
     * variables are left unchanged.
 | 
			
		||||
     * @param d          A vector holding values for all variables, which order
 | 
			
		||||
     *                   specified in the below container
 | 
			
		||||
     * @param dimensions A container of the dimension of each variable to create.
 | 
			
		||||
     */
 | 
			
		||||
    template<class CONTAINER>
 | 
			
		||||
    void append(const Vector& d, const CONTAINER& dimensions);
 | 
			
		||||
 | 
			
		||||
    /** Removes the last subvector from the VectorValues */
 | 
			
		||||
    void pop_back() { values_.pop_back(); };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -409,6 +428,19 @@ namespace gtsam {
 | 
			
		|||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* ************************************************************************* */
 | 
			
		||||
  template<class CONTAINER>
 | 
			
		||||
  void VectorValues::append(const Vector& d, const CONTAINER& dimensions) {
 | 
			
		||||
    size_t i = size();
 | 
			
		||||
    size_t idx = 0;
 | 
			
		||||
    values_.resize(size() + dimensions.size());
 | 
			
		||||
    BOOST_FOREACH(size_t dim, dimensions) {
 | 
			
		||||
      values_[i] = sub(d, idx, idx+dim);
 | 
			
		||||
      ++ i;
 | 
			
		||||
      idx += dim;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* ************************************************************************* */
 | 
			
		||||
  template<class CONTAINER>
 | 
			
		||||
  VectorValues VectorValues::Zero(const CONTAINER& dimensions) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -395,6 +395,36 @@ TEST(VectorValues, append) {
 | 
			
		|||
  CHECK_EXCEPTION(actual.insert(3, Vector()), invalid_argument);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
TEST(VectorValues, append_withValuesFromVector) {
 | 
			
		||||
  // Constructor with initial values
 | 
			
		||||
  vector<size_t> dims(3);
 | 
			
		||||
  dims[0] = 1;
 | 
			
		||||
  dims[1] = 2;
 | 
			
		||||
  dims[2] = 2;
 | 
			
		||||
  Vector d = Vector_(5, 1.0, 2.0, 3.0, 4.0, 5.0);
 | 
			
		||||
  VectorValues actual(d, dims);
 | 
			
		||||
 | 
			
		||||
  VectorValues expected;
 | 
			
		||||
  expected.insert(0, Vector_(1, 1.0));
 | 
			
		||||
  expected.insert(1, Vector_(2, 2.0, 3.0));
 | 
			
		||||
  expected.insert(2, Vector_(2, 4.0, 5.0));
 | 
			
		||||
 | 
			
		||||
  EXPECT(assert_equal(expected, actual));
 | 
			
		||||
 | 
			
		||||
  // Append with initial values
 | 
			
		||||
  expected.insert(3, Vector_(1, 6.0));
 | 
			
		||||
  expected.insert(4, Vector_(3, 7.0, 8.0, 9.0));
 | 
			
		||||
 | 
			
		||||
  vector<size_t> dims2(2);
 | 
			
		||||
  dims2[0] = 1;
 | 
			
		||||
  dims2[1] = 3;
 | 
			
		||||
  Vector d2 = Vector_(4, 6.0, 7.0, 8.0, 9.0);
 | 
			
		||||
  actual.append(d2, dims2);
 | 
			
		||||
 | 
			
		||||
  EXPECT(assert_equal(expected, actual));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
TEST(VectorValues, hasSameStructure) {
 | 
			
		||||
  VectorValues v1(2, 3);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue