Milena (Olena)
User documentation 2.0a Id
|
00001 // Copyright (C) 2009, 2010 EPITA Research and Development Laboratory 00002 // (LRDE) 00003 // 00004 // This file is part of Olena. 00005 // 00006 // Olena is free software: you can redistribute it and/or modify it under 00007 // the terms of the GNU General Public License as published by the Free 00008 // Software Foundation, version 2 of the License. 00009 // 00010 // Olena is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 // General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Olena. If not, see <http://www.gnu.org/licenses/>. 00017 // 00018 // As a special exception, you may use this file as part of a free 00019 // software project without restriction. Specifically, if other files 00020 // instantiate templates or use macros or inline functions from this 00021 // file, or you compile this file and link it with other files to produce 00022 // an executable, this file does not by itself cause the resulting 00023 // executable to be covered by the GNU General Public License. This 00024 // exception does not however invalidate any other reasons why the 00025 // executable file might be covered by the GNU General Public License. 00026 00027 #ifndef MLN_DEBUG_FILENAME_HH 00028 # define MLN_DEBUG_FILENAME_HH 00029 00033 00034 00035 # include <string> 00036 # include <sstream> 00037 00038 00039 namespace mln 00040 { 00041 00042 namespace debug 00043 { 00044 00046 00058 std::string 00059 filename(const std::string& filename, int id); 00060 00061 00062 namespace internal 00063 { 00064 00065 extern std::string filename_prefix; 00066 00067 } // end of namespace mln::debug::internal 00068 00069 00070 # ifndef MLN_INCLUDE_ONLY 00071 00072 # ifndef MLN_WO_GLOBAL_VARS 00073 00074 namespace internal 00075 { 00076 00077 std::string filename_prefix = ""; 00078 00079 } // end of namespace mln::debug::internal 00080 00081 # endif // ! MLN_WO_GLOBAL_VARS 00082 00083 00084 inline 00085 std::string 00086 filename(const std::string& filename, int id = -1) 00087 { 00088 static int file_id = 1; 00089 00090 std::ostringstream os; 00091 00092 if (! internal::filename_prefix.empty()) 00093 os << internal::filename_prefix << "_"; 00094 00095 if (id == -1) 00096 { 00097 if (file_id < 10) 00098 os << "0"; 00099 if (file_id < 100) 00100 os << "0"; 00101 00102 os << file_id++; 00103 } 00104 else 00105 os << id; 00106 00107 os << "_" 00108 << filename; 00109 00110 return os.str(); 00111 } 00112 00113 00114 # endif // ! MLN_INCLUDE_ONLY 00115 00116 } // end of namespace mln::debug 00117 00118 } // end of namespace mln 00119 00120 #endif // ! MLN_DEBUG_FILENAME_HH