correct serialization of base classes
moved all serialize functions to bottom of class declarationrelease/4.3a0
							parent
							
								
									c69d8d9b36
								
							
						
					
					
						commit
						92dbc8910e
					
				|  | @ -89,7 +89,7 @@ namespace gtsam { | |||
| 		/**
 | ||||
| 		 * Check if equal up to specified tolerance | ||||
| 		 */ | ||||
| 		bool equals(const Cal3_S2& K, double tol) const; | ||||
| 		bool equals(const Cal3_S2& K, double tol = 10e-9) const; | ||||
| 
 | ||||
| 		/** friends */ | ||||
| 		friend Matrix Duncalibrate2(const Cal3_S2& K, const Point2& p); | ||||
|  |  | |||
|  | @ -32,13 +32,6 @@ namespace gtsam { | |||
| 		/** Collection of factors */ | ||||
| 		std::vector<shared_factor> factors_; | ||||
| 
 | ||||
| 		/** Serialization function */ | ||||
| 		friend class boost::serialization::access; | ||||
| 		template<class Archive> | ||||
| 		void serialize(Archive & ar, const unsigned int version) { | ||||
| 			ar & BOOST_SERIALIZATION_NVP(factors_); | ||||
| 		} | ||||
| 
 | ||||
| 	public: | ||||
| 
 | ||||
| 		/** STL like, return the iterator pointing to the first factor */ | ||||
|  | @ -109,6 +102,14 @@ namespace gtsam { | |||
| 			fg.print(); | ||||
| 			return false; | ||||
| 		} | ||||
| 	}; | ||||
| 
 | ||||
| 	private: | ||||
| 
 | ||||
| 		/** Serialization function */ | ||||
| 		friend class boost::serialization::access; | ||||
| 		template<class Archive> | ||||
| 		void serialize(Archive & ar, const unsigned int version) { | ||||
| 			ar & BOOST_SERIALIZATION_NVP(factors_); | ||||
| 		} | ||||
| 	}; // FactorGraph
 | ||||
| } // namespace gtsam
 | ||||
|  |  | |||
|  | @ -33,23 +33,11 @@ namespace gtsam { | |||
| 	//typedef boost::shared_ptr<LinearFactor> shared_ptr;
 | ||||
| 
 | ||||
|   /**
 | ||||
|    * Nonlinear factor which assume Gaussian noise on a measurement | ||||
|    * predicted by a non-linear function h | ||||
|    * Nonlinear factor which assumes Gaussian noise on a measurement | ||||
|    * predicted by a non-linear function h. | ||||
|    */ | ||||
|   class NonlinearFactor : public Factor | ||||
|   { | ||||
|   private: | ||||
| 
 | ||||
|   	/** Serialization function */ | ||||
|   	friend class boost::serialization::access; | ||||
|   	template<class Archive> | ||||
|   	void serialize(Archive & ar, const unsigned int version) { | ||||
| //  		ar & boost::serialization::base_object<Factor>(*this); // TODO: needed ?
 | ||||
|   		ar & BOOST_SERIALIZATION_NVP(z_); | ||||
|   		ar & BOOST_SERIALIZATION_NVP(sigma_); | ||||
|   		ar & BOOST_SERIALIZATION_NVP(keys_); | ||||
|   	} | ||||
| 
 | ||||
|   protected: | ||||
| 
 | ||||
|     Vector z_;     // measurement
 | ||||
|  | @ -93,13 +81,27 @@ namespace gtsam { | |||
| 
 | ||||
|     /** dump the information of the factor into a string **/ | ||||
|     std::string dump() const{return "";} | ||||
|   }; | ||||
| 
 | ||||
|   private: | ||||
| 
 | ||||
| 		/** Serialization function */ | ||||
| 		friend class boost::serialization::access; | ||||
| 		template<class Archive> | ||||
| 		void serialize(Archive & ar, const unsigned int version) { | ||||
| 			//  		ar & boost::serialization::base_object<Factor>(*this); // TODO: needed ?
 | ||||
| 			ar & BOOST_SERIALIZATION_NVP(z_); | ||||
| 			ar & BOOST_SERIALIZATION_NVP(sigma_); | ||||
| 			ar & BOOST_SERIALIZATION_NVP(keys_); | ||||
| 		} | ||||
| 
 | ||||
|   }; // NonlinearFactor
 | ||||
| 
 | ||||
| 
 | ||||
|   /* ************************************************************************* */ | ||||
|   /* a Gaussian nonlinear factor that takes 1 parameter                        */ | ||||
|   /* ************************************************************************* */ | ||||
| 
 | ||||
|   /**
 | ||||
|    * a Gaussian nonlinear factor that takes 1 parameter | ||||
|    * Note: cannot be serialized as contains function pointers | ||||
|    * Specialized derived classes could do this | ||||
|   */ | ||||
|   class NonlinearFactor1 : public NonlinearFactor { | ||||
|   public: | ||||
| 
 | ||||
|  | @ -130,10 +132,11 @@ namespace gtsam { | |||
|     std::string dump() const {return "";} | ||||
|   }; | ||||
| 
 | ||||
|   /* ************************************************************************* */ | ||||
|   /* A Gaussian nonlinear factor that takes 2 parameters                       */ | ||||
|   /* ************************************************************************* */ | ||||
| 
 | ||||
| 	/**
 | ||||
| 	 * a Gaussian nonlinear factor that takes 2 parameters | ||||
| 	 * Note: cannot be serialized as contains function pointers | ||||
| 	 * Specialized derived classes could do this | ||||
| 	*/ | ||||
|   class NonlinearFactor2 : public NonlinearFactor { | ||||
|   public: | ||||
| 
 | ||||
|  |  | |||
|  | @ -19,18 +19,11 @@ | |||
| 
 | ||||
| namespace gtsam { | ||||
| 
 | ||||
| typedef FactorGraph<NonlinearFactor> BaseFactorGraph; | ||||
| 
 | ||||
| /** Factor Graph Constsiting of non-linear factors */ | ||||
| class NonlinearFactorGraph : public FactorGraph<NonlinearFactor> | ||||
| class NonlinearFactorGraph : public BaseFactorGraph | ||||
| { | ||||
| private: | ||||
| 
 | ||||
| 	/** Serialization function */ | ||||
| 	friend class boost::serialization::access; | ||||
| 	template<class Archive> | ||||
| 	void serialize(Archive & ar, const unsigned int version) { | ||||
| 		ar & boost::serialization::base_object< FactorGraph<NonlinearFactor> >(*this); | ||||
| 	} | ||||
| 
 | ||||
| public: // internal, exposed for testing only, doc in .cpp file
 | ||||
| 
 | ||||
| 	FGConfig iterate(const FGConfig& config, const Ordering& ordering) const; | ||||
|  | @ -117,5 +110,16 @@ public: // these you will probably want to use | |||
| 			double lambda0, | ||||
| 			double lambdaFactor) const ; | ||||
| 
 | ||||
| private: | ||||
| 
 | ||||
| 	/** Serialization function */ | ||||
| 	friend class boost::serialization::access; | ||||
| 	template<class Archive> | ||||
| 	void serialize(Archive & ar, const unsigned int version) { | ||||
| 		// do not use BOOST_SERIALIZATION_NVP for this name-value-pair ! It will crash.
 | ||||
| 		ar & boost::serialization::make_nvp("BaseFactorGraph", | ||||
| 				boost::serialization::base_object<BaseFactorGraph>(*this)); | ||||
| 	} | ||||
| 
 | ||||
| }; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue