/* -*- mode: c++ -*- */ /** * @file Tools.h * @author Sebastien Fourey <http://www.greyc.ensicaen.fr/~seb> * @date Nov 2008 * * @brief * @copyright * This source code is part of the Board project, a C++ library whose * purpose is to allow simple drawings in EPS, FIG or SVG files. * Copyright (C) 2007 Sebastien Fourey <http://www.greyc.ensicaen.fr/~seb/> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * This source code is part of the Board project, a C++ library whose * purpose is to allow simple drawings in EPS, FIG or SVG files. * Copyright (C) 2007 Sebastien Fourey <http://www.greyc.ensicaen.fr/~seb/> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef _BOARD_TOOLS_H_ #define _BOARD_TOOLS_H_ #include <iostream> #include <ctime> #include <cstring> #define SHOW( V ) std::cerr << " " #V " = " << ( V ) << std::endl namespace LibBoard { /** * A "prefixable" message stream * */ class MessageStream { public: inline MessageStream( std::ostream & out, const char * prefix ); template<typename T> inline MessageStream operator<<( const T & v ); private: std::ostream & _out; const char * _prefix; }; extern MessageStream error; extern MessageStream warning; extern MessageStream notice; MessageStream::MessageStream( std::ostream & out, const char * prefix ) : _out( out ), _prefix( prefix ) { } template<typename T> MessageStream MessageStream::operator<<( const T & v ) { if ( _prefix ) _out << _prefix << v; else _out << v; return MessageStream( _out, 0 ); } #if defined( _MSC_VER ) #define secured_sprintf sprintf_s #else #define secured_sprintf snprintf #endif // defined( _MSC_VER ) inline void secured_strncpy( char * dst, const char * src, size_t count ); inline void secured_ctime( char * str, const time_t * t, size_t count ); } #include "Tools.ih" #endif /* _SHAPE_H_ */