| 
									
										
										
										
											2013-06-06 23:36:46 +08:00
										 |  |  | #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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 06:05:12 +08:00
										 |  |  |     typedef std::shared_ptr<This> shared_ptr;  ///< Shared pointer to | 
					
						
							| 
									
										
										
										
											2013-06-06 23:36:46 +08:00
										 |  |  |  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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-18 06:05:12 +08:00
										 |  |  |     typedef std::shared_ptr<FACTOR> sharedFactor; ///< Shared pointer | 
					
						
							| 
									
										
										
										
											2013-06-06 23:36:46 +08:00
										 |  |  |  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 |