<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>HippoDraw Class Library</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> <link rel="shortcut icon" href="hippoApp.ico"> </head><body> <!-- Generated by Doxygen 1.6.2 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="dirs.html"><span>Directories</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="dir_81660c05fb6bfb5c6c7ef0fee605ba15.html">datasrcs</a> </div> </div> <div class="contents"> <h1>DataSource.h</h1><a href="DataSource_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* -*- c++ -*- */</span> <a name="l00002"></a>00002 <a name="l00014"></a>00014 <span class="preprocessor">#ifndef DataSource_H</span> <a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define DataSource_H</span> <a name="l00016"></a>00016 <span class="preprocessor"></span> <a name="l00017"></a>00017 <span class="preprocessor">#ifdef _MSC_VER</span> <a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#include <msdevstudio/MSconfig.h></span> <a name="l00019"></a>00019 <span class="preprocessor">#endif</span> <a name="l00020"></a>00020 <span class="preprocessor"></span> <a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="Observable_8h.html" title="Observable class interface.">pattern/Observable.h</a>"</span> <a name="l00022"></a>00022 <a name="l00023"></a>00023 <span class="preprocessor">#include <string></span> <a name="l00024"></a>00024 <span class="preprocessor">#include <vector></span> <a name="l00025"></a>00025 <a name="l00026"></a>00026 <span class="preprocessor">#ifndef _MSC_VER</span> <a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include <inttypes.h></span> <a name="l00028"></a>00028 <span class="preprocessor">#endif</span> <a name="l00029"></a>00029 <span class="preprocessor"></span> <a name="l00030"></a>00030 <span class="keyword">namespace </span>hippodraw { <a name="l00031"></a>00031 <span class="keyword">class </span>Range; <a name="l00032"></a>00032 <a name="l00033"></a>00033 <a name="l00055"></a><a class="code" href="classhippodraw_1_1DataSource.html">00055</a> <span class="keyword">class </span><a class="code" href="libhippo_8h.html#a480024fd54849c743866874550153711">MDL_HIPPOPLOT_API</a> <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> : <span class="keyword">public</span> <a class="code" href="classhippodraw_1_1Observable.html" title="Part of an implementation of the Observable-Observer pattern based on the example...">Observable</a> <a name="l00056"></a>00056 { <a name="l00057"></a>00057 <a name="l00058"></a>00058 <span class="keyword">private</span>: <a name="l00059"></a>00059 <a name="l00066"></a><a class="code" href="classhippodraw_1_1DataSource.html#a44fffac8d043900f294932f30f79e1d5">00066</a> std::string m_ds_name; <a name="l00067"></a>00067 <a name="l00070"></a><a class="code" href="classhippodraw_1_1DataSource.html#a85b5b28ec973f933b9ed1328f2756def">00070</a> std::string m_title; <a name="l00071"></a>00071 <a name="l00074"></a><a class="code" href="classhippodraw_1_1DataSource.html#af0804dacdf17109fce0cdedcfab75f1c">00074</a> std::vector<std::string> m_labels; <a name="l00075"></a>00075 <a name="l00082"></a><a class="code" href="classhippodraw_1_1DataSource.html#a5ee14050d65d7a7b83631acd6018db24">00082</a> <span class="keywordtype">bool</span> m_is_null; <a name="l00083"></a>00083 <a name="l00084"></a>00084 <span class="keyword">protected</span>: <a name="l00085"></a>00085 <a name="l00088"></a><a class="code" href="classhippodraw_1_1DataSource.html#abf0ad6ebed92b290c2321dd994aabf19">00088</a> <span class="keyword">mutable</span> std::vector < double > m_array; <a name="l00089"></a>00089 <a name="l00096"></a><a class="code" href="classhippodraw_1_1DataSource.html#a4e73e38e0edb48dacc82de939a94d46b">00096</a> std::vector < unsigned int > m_shape; <a name="l00097"></a>00097 <a name="l00100"></a><a class="code" href="classhippodraw_1_1DataSource.html#ac45a52bd27ca7e33b5b8e49073448560">00100</a> std::vector < std::string > m_dups; <a name="l00101"></a>00101 <a name="l00104"></a>00104 <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> ( <span class="keyword">const</span> std::vector < std::string > & labels ); <a name="l00105"></a>00105 <a name="l00107"></a>00107 <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> ( <span class="keyword">const</span> std::string & name ); <a name="l00108"></a>00108 <a name="l00114"></a>00114 <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> ( <span class="keyword">const</span> <span class="keywordtype">char</span> * name ); <a name="l00115"></a>00115 <a name="l00119"></a>00119 <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> ( <span class="keyword">const</span> <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> & nt); <a name="l00120"></a>00120 <a name="l00131"></a>00131 <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> ( <span class="keywordtype">bool</span> dummy ); <a name="l00132"></a>00132 <a name="l00135"></a>00135 <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> (); <a name="l00136"></a>00136 <a name="l00140"></a>00140 <span class="keyword">virtual</span> <span class="keywordtype">void</span> copyPrivate ( <span class="keyword">const</span> <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> & other ); <a name="l00141"></a>00141 <a name="l00144"></a>00144 <span class="keyword">virtual</span> <span class="keywordtype">void</span> addLabel ( <span class="keyword">const</span> std::string & label ); <a name="l00145"></a>00145 <a name="l00149"></a>00149 <span class="keywordtype">bool</span> isValidColumn ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index ) <span class="keyword">const</span>; <a name="l00150"></a>00150 <a name="l00156"></a>00156 <span class="keyword">virtual</span> <span class="keywordtype">void</span> checkWidth ( <span class="keyword">const</span> <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> * source ); <a name="l00157"></a>00157 <a name="l00158"></a>00158 <span class="keyword">public</span>: <a name="l00159"></a>00159 <a name="l00162"></a>00162 <span class="keyword">virtual</span> ~<a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a>(); <a name="l00163"></a>00163 <a name="l00167"></a>00167 <span class="keywordtype">bool</span> isNull () <span class="keyword">const</span>; <a name="l00168"></a>00168 <a name="l00171"></a>00171 <span class="keywordtype">void</span> setName ( <span class="keyword">const</span> std::string & name ); <a name="l00172"></a>00172 <a name="l00175"></a>00175 <span class="keyword">const</span> std::string & getName () <span class="keyword">const</span>; <a name="l00176"></a>00176 <a name="l00182"></a>00182 <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> columns() <span class="keyword">const</span>; <a name="l00183"></a>00183 <a name="l00186"></a>00186 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rows () <span class="keyword">const</span> = 0; <a name="l00187"></a>00187 <a name="l00190"></a>00190 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> empty () <span class="keyword">const</span> = 0; <a name="l00191"></a>00191 <a name="l00194"></a>00194 <span class="keyword">const</span> std::string & title() <span class="keyword">const</span>; <a name="l00195"></a>00195 <a name="l00198"></a>00198 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setTitle ( <span class="keyword">const</span> std::string & title ); <a name="l00199"></a>00199 <a name="l00204"></a>00204 <span class="keywordtype">bool</span> isValidLabel ( <span class="keyword">const</span> std::string & label ) <span class="keyword">const</span>; <a name="l00205"></a>00205 <a name="l00212"></a>00212 <span class="keyword">virtual</span> <span class="keywordtype">void</span> throwIfInvalidLabel ( <span class="keyword">const</span> std::string & label ) <span class="keyword">const</span>; <a name="l00213"></a>00213 <a name="l00217"></a>00217 <span class="keywordtype">void</span> throwIfInvalidRowSize ( <span class="keyword">const</span> std::vector < double > & row ); <a name="l00218"></a>00218 <a name="l00225"></a>00225 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> setLabelAt ( <span class="keyword">const</span> std::string & s, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index ); <a name="l00226"></a>00226 <a name="l00229"></a>00229 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setLabels ( <span class="keyword">const</span> std::vector<std::string> & v ); <a name="l00230"></a>00230 <a name="l00234"></a>00234 <span class="keyword">virtual</span> <span class="keywordtype">double</span> valueAt ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span> = 0; <a name="l00235"></a>00235 <a name="l00239"></a>00239 <span class="keyword">virtual</span> <span class="keywordtype">double</span> valueAtNoCache ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00240"></a>00240 <a name="l00243"></a>00243 <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector < double > & <a name="l00244"></a>00244 getColumn ( <span class="keyword">const</span> std::string & name ) <span class="keyword">const</span>; <a name="l00245"></a>00245 <a name="l00248"></a>00248 <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector < double > & <a name="l00249"></a>00249 getColumn ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00250"></a>00250 <a name="l00253"></a>00253 <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector < double > & getRow ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ) <span class="keyword">const</span> = 0; <a name="l00254"></a>00254 <a name="l00257"></a>00257 <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector < std::string > & getLabels () <span class="keyword">const</span>; <a name="l00258"></a>00258 <a name="l00263"></a>00263 <span class="keyword">virtual</span> <span class="keyword">const</span> std::string & getLabelAt ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index ) <span class="keyword">const</span>; <a name="l00264"></a>00264 <a name="l00273"></a>00273 <span class="keyword">virtual</span> <span class="keywordtype">int</span> indexOf ( <span class="keyword">const</span> std::string & label ) <span class="keyword">const</span>; <a name="l00274"></a>00274 <a name="l00281"></a>00281 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setShape ( std::vector < unsigned int > & <a class="code" href="namespacenum__util.html#a8570d9b34e8e9d714823c1b1986764f7">shape</a> ); <a name="l00282"></a>00282 <a name="l00285"></a>00285 <span class="keyword">virtual</span> <span class="keyword">const</span> std::vector < unsigned int > & getShape () <span class="keyword">const</span>; <a name="l00286"></a>00286 <a name="l00294"></a>00294 <span class="keyword">virtual</span> <span class="keywordtype">void</span> fillShape ( std::vector < int > & v, <a name="l00295"></a>00295 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00296"></a>00296 <a name="l00304"></a>00304 <span class="keyword">virtual</span> <span class="keywordtype">void</span> fillShape ( std::vector < int > & v, <a name="l00305"></a>00305 <span class="keyword">const</span> std::string & label ) <span class="keyword">const</span>; <a name="l00306"></a>00306 <a name="l00310"></a>00310 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getRank () <span class="keyword">const</span>; <a name="l00311"></a>00311 <a name="l00320"></a>00320 <span class="keyword">virtual</span> <span class="keywordtype">void</span> replaceColumn ( <span class="keyword">const</span> std::string & label, <a name="l00321"></a>00321 <span class="keyword">const</span> std::vector < double > & array ); <a name="l00322"></a>00322 <a name="l00327"></a>00327 <span class="keyword">virtual</span> <span class="keywordtype">void</span> replaceColumn ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <a name="l00328"></a>00328 <span class="keyword">const</span> std::vector < double > & array ); <a name="l00329"></a>00329 <a name="l00338"></a>00338 <span class="keyword">virtual</span> <span class="keywordtype">void</span> replaceColumn ( <span class="keyword">const</span> std::string & label, <a name="l00339"></a>00339 <span class="keyword">const</span> std::vector < double > & <a class="code" href="namespacenum__util.html#a0c664ca7e08d03a2b3275f4f35efa933">data</a>, <a name="l00340"></a>00340 <span class="keyword">const</span> std::vector < intptr_t > & <a class="code" href="namespacenum__util.html#a8570d9b34e8e9d714823c1b1986764f7">shape</a> ); <a name="l00341"></a>00341 <a name="l00349"></a>00349 <span class="keyword">virtual</span> <span class="keywordtype">int</span> addColumn ( <span class="keyword">const</span> std::string & label, <a name="l00350"></a>00350 <span class="keyword">const</span> std::vector < double > & <a class="code" href="namespacenum__util.html#a0c664ca7e08d03a2b3275f4f35efa933">data</a>, <a name="l00351"></a>00351 <span class="keyword">const</span> std::vector < intptr_t > & <a class="code" href="namespacenum__util.html#a8570d9b34e8e9d714823c1b1986764f7">shape</a> ); <a name="l00352"></a>00352 <a name="l00359"></a>00359 <span class="keyword">virtual</span> <span class="keywordtype">int</span> addColumn ( <span class="keyword">const</span> std::string & label, <a name="l00360"></a>00360 <span class="keyword">const</span> std::vector < double > & <a class="code" href="namespacenum__util.html#a0c664ca7e08d03a2b3275f4f35efa933">data</a> ); <a name="l00361"></a>00361 <a name="l00367"></a>00367 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> fillRange ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a>, <a class="code" href="classhippodraw_1_1Range.html" title="Expresses a range of values.">Range</a> & ) <span class="keyword">const</span>; <a name="l00368"></a>00368 <a name="l00372"></a>00372 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexOfMaxElement ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index ) <span class="keyword">const</span>; <a name="l00373"></a>00373 <a name="l00377"></a>00377 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> indexOfMinElement ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index ) <span class="keyword">const</span>; <a name="l00378"></a>00378 <a name="l00379"></a>00379 <a name="l00383"></a>00383 <span class="keyword">virtual</span> <span class="keywordtype">double</span> sum ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00384"></a>00384 <a name="l00389"></a>00389 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isMultiDimensional ( <span class="keyword">const</span> std::string & <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00390"></a>00390 <a name="l00395"></a>00395 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isUseable ( <span class="keyword">const</span> std::string & <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00396"></a>00396 <a name="l00400"></a>00400 <span class="keyword">virtual</span> <span class="keywordtype">bool</span> setReleventIndex( <span class="keyword">const</span> std::string & <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a>, <a name="l00401"></a>00401 <span class="keyword">const</span> std::vector< unsigned int >& index ); <a name="l00402"></a>00402 <a name="l00405"></a>00405 <span class="keyword">virtual</span> <span class="keywordtype">void</span> clear () = 0; <a name="l00406"></a>00406 <a name="l00410"></a>00410 <span class="keyword">virtual</span> <span class="keywordtype">void</span> reserve ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count ) = 0; <a name="l00411"></a>00411 <a name="l00416"></a>00416 <span class="keyword">virtual</span> <span class="keywordtype">void</span> addRow ( <span class="keyword">const</span> std::vector < double > & row ); <a name="l00417"></a>00417 <a name="l00421"></a>00421 <span class="keyword">virtual</span> <span class="keywordtype">void</span> eraseRow ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index ); <a name="l00422"></a>00422 <a name="l00423"></a>00423 <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a name="l00424"></a>00424 operator [] ( std::vector < unsigned int > & indices ) <span class="keyword">const</span> = 0; <a name="l00425"></a>00425 <a name="l00426"></a>00426 <a name="l00429"></a>00429 <span class="keyword">const</span> std::vector < std::string > & getDuplicatedLabels () <span class="keyword">const</span>; <a name="l00430"></a>00430 <a name="l00437"></a>00437 <span class="keyword">virtual</span> <span class="keywordtype">void</span> append ( <span class="keyword">const</span> <a class="code" href="classhippodraw_1_1DataSource.html" title="Base class for DataSource.">DataSource</a> * source ); <a name="l00438"></a>00438 <a name="l00444"></a>00444 <span class="keyword">virtual</span> <span class="keywordtype">double</span> * doubleArrayAt ( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row, <a name="l00445"></a>00445 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacehippodraw_1_1DataPoint2DTuple.html#ae78e6e11a40e6dba1bae097358f97d15" title="The column indices for 2 dimension data point tuple.">column</a> ) <span class="keyword">const</span>; <a name="l00446"></a>00446 <a name="l00447"></a>00447 <a name="l00451"></a>00451 <span class="keyword">virtual</span> <span class="keywordtype">void</span> expandIfNeeded( <span class="keyword">const</span> std::vector<std::string> & labels ) <span class="keyword">const</span>; <a name="l00452"></a>00452 <a name="l00453"></a>00453 }; <a name="l00454"></a>00454 <a name="l00455"></a>00455 <span class="keyword">inline</span> <a name="l00456"></a>00456 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a name="l00457"></a>00457 <a class="code" href="classhippodraw_1_1DataSource.html#a903d6ffef3ddea0d904a5336e231b643" title="Returns the number of columns or data arrays available from this DataSource.">DataSource::</a> <a name="l00458"></a><a class="code" href="classhippodraw_1_1DataSource.html#a903d6ffef3ddea0d904a5336e231b643">00458</a> <a class="code" href="classhippodraw_1_1DataSource.html#a903d6ffef3ddea0d904a5336e231b643" title="Returns the number of columns or data arrays available from this DataSource.">columns</a> ()<span class="keyword"> const</span> <a name="l00459"></a>00459 <span class="keyword"></span>{ <a name="l00460"></a>00460 <span class="keywordflow">return</span> static_cast < <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> > ( <a class="code" href="classhippodraw_1_1DataSource.html#af0804dacdf17109fce0cdedcfab75f1c" title="The labels of the vectors of the data.">m_labels</a>.size() ); <a name="l00461"></a>00461 } <a name="l00462"></a>00462 <a name="l00463"></a>00463 } <span class="comment">// namespace hippodraw</span> <a name="l00464"></a>00464 <a name="l00465"></a>00465 <span class="preprocessor">#endif // DataSource_H</span> </pre></div></div> <hr size="1"><address style="align: right;"><small> Generated for HippoDraw Class Library by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border=0> </a> </small></address> </body> </html>