482 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
		
			
		
	
	
			482 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
| 
								 | 
							
								#LyX 2.0 created this file. For more info see http://www.lyx.org/
							 | 
						||
| 
								 | 
							
								\lyxformat 413
							 | 
						||
| 
								 | 
							
								\begin_document
							 | 
						||
| 
								 | 
							
								\begin_header
							 | 
						||
| 
								 | 
							
								\textclass article
							 | 
						||
| 
								 | 
							
								\begin_preamble
							 | 
						||
| 
								 | 
							
								\usepackage{color}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\definecolor{mygreen}{rgb}{0,0.6,0}
							 | 
						||
| 
								 | 
							
								\definecolor{mygray}{rgb}{0.5,0.5,0.5}
							 | 
						||
| 
								 | 
							
								\definecolor{mymauve}{rgb}{0.58,0,0.82}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\lstset{ %
							 | 
						||
| 
								 | 
							
								  backgroundcolor=\color{white},   % choose the background color; you must add \usepackage{color} or \usepackage{xcolor}
							 | 
						||
| 
								 | 
							
								  basicstyle=\footnotesize,        % the size of the fonts that are used for the code
							 | 
						||
| 
								 | 
							
								  breakatwhitespace=false,         % sets if automatic breaks should only happen at whitespace
							 | 
						||
| 
								 | 
							
								  breaklines=true,                 % sets automatic line breaking
							 | 
						||
| 
								 | 
							
								  captionpos=b,                    % sets the caption-position to bottom
							 | 
						||
| 
								 | 
							
								  commentstyle=\color{mygreen},    % comment style
							 | 
						||
| 
								 | 
							
								%  deletekeywords={...},            % if you want to delete keywords from the given language
							 | 
						||
| 
								 | 
							
								  escapeinside={\%*}{*)},          % if you want to add LaTeX within your code
							 | 
						||
| 
								 | 
							
								  extendedchars=true,              % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
							 | 
						||
| 
								 | 
							
								  frame=single,                    % adds a frame around the code
							 | 
						||
| 
								 | 
							
								  keepspaces=true,                 % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
							 | 
						||
| 
								 | 
							
								  keywordstyle=\color{blue},       % keyword style
							 | 
						||
| 
								 | 
							
								  language=C++,                 % the language of the code
							 | 
						||
| 
								 | 
							
								  morekeywords={*,...},            % if you want to add more keywords to the set
							 | 
						||
| 
								 | 
							
								  numbers=left,                    % where to put the line-numbers; possible values are (none, left, right)
							 | 
						||
| 
								 | 
							
								  numbersep=5pt,                   % how far the line-numbers are from the code
							 | 
						||
| 
								 | 
							
								  numberstyle=\tiny\color{mygray}, % the style that is used for the line-numbers
							 | 
						||
| 
								 | 
							
								  rulecolor=\color{black},         % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
							 | 
						||
| 
								 | 
							
								  showspaces=false,                % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
							 | 
						||
| 
								 | 
							
								  showstringspaces=false,          % underline spaces within strings only
							 | 
						||
| 
								 | 
							
								  showtabs=false,                  % show tabs within strings adding particular underscores
							 | 
						||
| 
								 | 
							
								  stepnumber=2,                    % the step between two line-numbers. If it's 1, each line will be numbered
							 | 
						||
| 
								 | 
							
								  stringstyle=\color{mymauve},     % string literal style
							 | 
						||
| 
								 | 
							
								  tabsize=2,                       % sets default tabsize to 2 spaces
							 | 
						||
| 
								 | 
							
								  title=\lstname                   % show the filename of files included with \lstinputlisting; also try caption instead of title
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								\end_preamble
							 | 
						||
| 
								 | 
							
								\use_default_options true
							 | 
						||
| 
								 | 
							
								\maintain_unincluded_children false
							 | 
						||
| 
								 | 
							
								\language english
							 | 
						||
| 
								 | 
							
								\language_package default
							 | 
						||
| 
								 | 
							
								\inputencoding auto
							 | 
						||
| 
								 | 
							
								\fontencoding global
							 | 
						||
| 
								 | 
							
								\font_roman lmodern
							 | 
						||
| 
								 | 
							
								\font_sans lmss
							 | 
						||
| 
								 | 
							
								\font_typewriter lmtt
							 | 
						||
| 
								 | 
							
								\font_default_family default
							 | 
						||
| 
								 | 
							
								\use_non_tex_fonts false
							 | 
						||
| 
								 | 
							
								\font_sc false
							 | 
						||
| 
								 | 
							
								\font_osf false
							 | 
						||
| 
								 | 
							
								\font_sf_scale 100
							 | 
						||
| 
								 | 
							
								\font_tt_scale 100
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\graphics default
							 | 
						||
| 
								 | 
							
								\default_output_format default
							 | 
						||
| 
								 | 
							
								\output_sync 0
							 | 
						||
| 
								 | 
							
								\bibtex_command default
							 | 
						||
| 
								 | 
							
								\index_command default
							 | 
						||
| 
								 | 
							
								\paperfontsize default
							 | 
						||
| 
								 | 
							
								\spacing single
							 | 
						||
| 
								 | 
							
								\use_hyperref false
							 | 
						||
| 
								 | 
							
								\papersize default
							 | 
						||
| 
								 | 
							
								\use_geometry false
							 | 
						||
| 
								 | 
							
								\use_amsmath 1
							 | 
						||
| 
								 | 
							
								\use_esint 1
							 | 
						||
| 
								 | 
							
								\use_mhchem 1
							 | 
						||
| 
								 | 
							
								\use_mathdots 1
							 | 
						||
| 
								 | 
							
								\cite_engine basic
							 | 
						||
| 
								 | 
							
								\use_bibtopic false
							 | 
						||
| 
								 | 
							
								\use_indices false
							 | 
						||
| 
								 | 
							
								\paperorientation portrait
							 | 
						||
| 
								 | 
							
								\suppress_date false
							 | 
						||
| 
								 | 
							
								\use_refstyle 1
							 | 
						||
| 
								 | 
							
								\index Index
							 | 
						||
| 
								 | 
							
								\shortcut idx
							 | 
						||
| 
								 | 
							
								\color #008000
							 | 
						||
| 
								 | 
							
								\end_index
							 | 
						||
| 
								 | 
							
								\secnumdepth 3
							 | 
						||
| 
								 | 
							
								\tocdepth 3
							 | 
						||
| 
								 | 
							
								\paragraph_separation indent
							 | 
						||
| 
								 | 
							
								\paragraph_indentation default
							 | 
						||
| 
								 | 
							
								\quotes_language english
							 | 
						||
| 
								 | 
							
								\papercolumns 1
							 | 
						||
| 
								 | 
							
								\papersides 1
							 | 
						||
| 
								 | 
							
								\paperpagestyle default
							 | 
						||
| 
								 | 
							
								\tracking_changes false
							 | 
						||
| 
								 | 
							
								\output_changes false
							 | 
						||
| 
								 | 
							
								\html_math_output 0
							 | 
						||
| 
								 | 
							
								\html_css_as_file 0
							 | 
						||
| 
								 | 
							
								\html_be_strict false
							 | 
						||
| 
								 | 
							
								\end_header
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_body
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Section
							 | 
						||
| 
								 | 
							
								Template Classes
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Standard
							 | 
						||
| 
								 | 
							
								Templated classes are great for writing generic code for multiple types
							 | 
						||
| 
								 | 
							
								 (e.g.
							 | 
						||
| 
								 | 
							
								 the same elimination algorithm code for symbolic, discrete, and Gaussian
							 | 
						||
| 
								 | 
							
								 elimination) without the drawbacks of virtual inheritance (which include
							 | 
						||
| 
								 | 
							
								 rigid class interfaces, downcasting from returned base class pointers,
							 | 
						||
| 
								 | 
							
								 and additional runtime overhead).
							 | 
						||
| 
								 | 
							
								 Depending on how they're used, though, templates can result in very slow
							 | 
						||
| 
								 | 
							
								 compile times, large binary files, and hard-to-use code.
							 | 
						||
| 
								 | 
							
								 This section describes the 
							 | 
						||
| 
								 | 
							
								\begin_inset Quotes eld
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								best practices
							 | 
						||
| 
								 | 
							
								\begin_inset Quotes erd
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 we have developed for gaining the benefits of templates without the drawbacks.
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Standard
							 | 
						||
| 
								 | 
							
								If you need to write generic code or classes, here are several programming
							 | 
						||
| 
								 | 
							
								 patterns we have found to work very well:
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Subsection
							 | 
						||
| 
								 | 
							
								The 
							 | 
						||
| 
								 | 
							
								\begin_inset Quotes eld
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Templated Base, Specialized Derived
							 | 
						||
| 
								 | 
							
								\begin_inset Quotes erd
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 Pattern
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Standard
							 | 
						||
| 
								 | 
							
								This pattern is for when you have a generic class containing algorithm or
							 | 
						||
| 
								 | 
							
								 data structure code that will be specialized to several types.
							 | 
						||
| 
								 | 
							
								 The templated base class should never be used directly, instead only the
							 | 
						||
| 
								 | 
							
								 specializations should be used.
							 | 
						||
| 
								 | 
							
								 Some specialized types can be pre-compiled into the library, but the option
							 | 
						||
| 
								 | 
							
								 remains to specialize new types in external libraries or projects.
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Subsubsection
							 | 
						||
| 
								 | 
							
								Basic Class Structure
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Standard
							 | 
						||
| 
								 | 
							
								We'll use 
							 | 
						||
| 
								 | 
							
								\family typewriter
							 | 
						||
| 
								 | 
							
								FactorGraph
							 | 
						||
| 
								 | 
							
								\family default
							 | 
						||
| 
								 | 
							
								 as an example.
							 | 
						||
| 
								 | 
							
								 It is templated on the factor type stored in it and has several specializations.
							 | 
						||
| 
								 | 
							
								 The templated base class 
							 | 
						||
| 
								 | 
							
								\family typewriter
							 | 
						||
| 
								 | 
							
								FactorGraph<class FACTOR>
							 | 
						||
| 
								 | 
							
								\family default
							 | 
						||
| 
								 | 
							
								 is divided into a header file (
							 | 
						||
| 
								 | 
							
								\family typewriter
							 | 
						||
| 
								 | 
							
								.h
							 | 
						||
| 
								 | 
							
								\family default
							 | 
						||
| 
								 | 
							
								) and an 
							 | 
						||
| 
								 | 
							
								\begin_inset Quotes eld
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								instantiation
							 | 
						||
| 
								 | 
							
								\begin_inset Quotes erd
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 file (
							 | 
						||
| 
								 | 
							
								\family typewriter
							 | 
						||
| 
								 | 
							
								-inst.h
							 | 
						||
| 
								 | 
							
								\family default
							 | 
						||
| 
								 | 
							
								).
							 | 
						||
| 
								 | 
							
								 The basic class structure is as follows.
							 | 
						||
| 
								 | 
							
								\begin_inset listings
							 | 
						||
| 
								 | 
							
								lstparams "basicstyle={\scriptsize\ttfamily},language={C++}"
							 | 
						||
| 
								 | 
							
								inline false
							 | 
						||
| 
								 | 
							
								status open
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// File FactorGraph.h
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%*
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								bfseries{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								emph{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								color{red}{// Include a minimal set of headers.
							 | 
						||
| 
								 | 
							
								  Do not include any '-inst.h' files (this is the key to fast compiles).}}}*)
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/nvp.hpp>
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								...
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace gtsam {
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /** Class description */
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  template<class FACTOR>
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  class FactorGraph
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  %*
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								bfseries{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								emph{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								color{red}{// Make 'private' any typedefs that must be redefined in derived
							 | 
						||
| 
								 | 
							
								 classes.
							 | 
						||
| 
								 | 
							
								  E.g.
							 | 
						||
| 
								 | 
							
								 'This' in the context of the derived class should refer to the derived
							 | 
						||
| 
								 | 
							
								 class.
							 | 
						||
| 
								 | 
							
								  These typedefs will be used only by the generic code in this base class.}}}*)
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  private:
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef FactorGraph<FACTOR> This;  ///< Typedef for this class
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef boost::shared_ptr<This> shared_ptr;  ///< Shared pointer to
							 | 
						||
| 
								 | 
							
								 this
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  %*
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								bfseries{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								emph{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								color{red}{// Make 'public' the typedefs that will be valid in the derived
							 | 
						||
| 
								 | 
							
								 class.}}}*)
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef FACTOR FactorType; ///< Factor type stored in this graph
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    typedef boost::shared_ptr<FACTOR> sharedFactor; ///< Shared pointer
							 | 
						||
| 
								 | 
							
								 to a factor
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ...
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  %*
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								bfseries{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								emph{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								color{red}{// Normally, data is 'protected' so the derived class can access
							 | 
						||
| 
								 | 
							
								 it.}}}*)
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  protected:
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Collection of factors */
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    std::vector<sharedFactor> factors_;
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  %*
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								bfseries{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								emph{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								color{red}{// Make 'protected' all constructors, named constructors, or
							 | 
						||
| 
								 | 
							
								 methods returning the base class type.
							 | 
						||
| 
								 | 
							
								  These are not public - the derived class will call them and properly convert
							 | 
						||
| 
								 | 
							
								 returned base classes to the derived class.}}}*)
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// @name Standard Constructors
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// @{
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Default constructor */
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    FactorGraphUnordered() {}
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** Named constructor from iterator over factors */
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template<typename ITERATOR>
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    static This FromIterator(ITERATOR firstFactor, ITERATOR lastFactor);
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// @}
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  %*
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								bfseries{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								emph{
							 | 
						||
| 
								 | 
							
								\backslash
							 | 
						||
| 
								 | 
							
								color{red}{// Make 'public' standard methods that will be available in the
							 | 
						||
| 
								 | 
							
								 derived class's API.}}}*)
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  public:
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// @name Adding Factors
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// @{
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** ...
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void reserve(size_t size);
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ...
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /// @}
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\begin_layout Plain Layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_inset
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_layout
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								\end_body
							 | 
						||
| 
								 | 
							
								\end_document
							 |