OpenWalnut
1.4.0
|
00001 //--------------------------------------------------------------------------- 00002 // 00003 // Project: OpenWalnut ( http://www.openwalnut.org ) 00004 // 00005 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS 00006 // For more information see http://www.openwalnut.org/copying 00007 // 00008 // This file is part of OpenWalnut. 00009 // 00010 // OpenWalnut is free software: you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as published by 00012 // the Free Software Foundation, either version 3 of the License, or 00013 // (at your option) any later version. 00014 // 00015 // OpenWalnut is distributed in the hope that it will be useful, 00016 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 // GNU Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public License 00021 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>. 00022 // 00023 //--------------------------------------------------------------------------- 00024 00025 #ifndef WROIPROJECTFILEIO_H 00026 #define WROIPROJECTFILEIO_H 00027 00028 #include <string> 00029 #include <vector> 00030 #include <map> 00031 00032 #include "boost/tuple/tuple.hpp" 00033 00034 #include "../common/WProjectFileIO.h" 00035 00036 class WProjectFile; 00037 00038 /** 00039 * IO Class for writing the ROI structure to a project file. 00040 */ 00041 class WRoiProjectFileIO: public WProjectFileIO 00042 { 00043 public: 00044 /** 00045 * Default constructor. 00046 */ 00047 WRoiProjectFileIO(); 00048 00049 /** 00050 * Destructor. 00051 */ 00052 virtual ~WRoiProjectFileIO(); 00053 00054 /** 00055 * This method parses the specified line and interprets it. It gets called line by line by WProjectFile. 00056 * 00057 * \param line the current line as string 00058 * \param lineNumber the current line number. Useful for error/warning/debugging output. 00059 * 00060 * \return true if the line could be parsed. 00061 */ 00062 virtual bool parse( std::string line, unsigned int lineNumber ); 00063 00064 /** 00065 * Called whenever the end of the project file has been reached. This is useful if your specific parser class wants to do some post 00066 * processing after parsing line by line. 00067 */ 00068 virtual void done(); 00069 00070 /** 00071 * Saves the state to the specified stream. 00072 * 00073 * \param output the stream to print the state to. 00074 */ 00075 virtual void save( std::ostream& output ); // NOLINT 00076 00077 /** 00078 * Create a clone of the IO. This is especially useful for custom parsers registered at \ref WProjectFile::registerParser. Implement this 00079 * function. 00080 * 00081 * \param project the project file using this parser instance. 00082 * 00083 * \return Cloned instance. 00084 */ 00085 virtual SPtr clone( WProjectFile* project ) const; 00086 00087 protected: 00088 private: 00089 /** 00090 * Branch by ID 00091 */ 00092 typedef unsigned int Branch; 00093 00094 /** 00095 * Property for branch/roi with ID. Property name and value are stored as string 00096 */ 00097 typedef boost::tuple< std::string, std::string > Property; 00098 00099 /** 00100 * The properties as vector. 00101 */ 00102 typedef std::vector< Property > Properties; 00103 00104 /** 00105 * All loaded branch IDs 00106 */ 00107 std::vector< Branch > m_branches; 00108 00109 /** 00110 * Properties of each branch 00111 */ 00112 std::map< Branch, Properties > m_branchProperties; 00113 00114 /** 00115 * ID of a ROI 00116 */ 00117 typedef unsigned int RoiID; 00118 00119 /** 00120 * ROI by ID, second is parent branch ID 00121 */ 00122 typedef boost::tuple< RoiID, Branch > Roi; 00123 00124 /** 00125 * All loaded rois 00126 */ 00127 std::vector< Roi > m_rois; 00128 00129 /** 00130 * Properties of each branch 00131 */ 00132 std::map< RoiID, Properties > m_roiProperties; 00133 }; 00134 00135 #endif // WROIPROJECTFILEIO_H 00136