vmime/src/base.cpp

159 lines
3.7 KiB
C++
Raw Normal View History

2004-10-05 10:28:21 +00:00
//
2005-03-18 21:33:11 +00:00
// VMime library (http://www.vmime.org)
// Copyright (C) 2002-2005 Vincent Richard <vincent@vincent-richard.net>
2004-10-05 10:28:21 +00:00
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 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
// General Public License for more details.
//
2005-09-17 10:10:29 +00:00
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
// Linking this library statically or dynamically with other modules is making
// a combined work based on this library. Thus, the terms and conditions of
// the GNU General Public License cover the whole combination.
2004-10-05 10:28:21 +00:00
//
#include "vmime/config.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/charset.hpp"
#include "vmime/base.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/encoder.hpp"
#include "vmime/encoderB64.hpp"
#include "vmime/encoderQP.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/text.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/parserHelpers.hpp"
2004-10-05 10:28:21 +00:00
#include "vmime/utility/stringUtils.hpp"
2004-10-21 15:05:47 +00:00
2004-10-05 10:28:21 +00:00
// For initializing
#include "vmime/encoderFactory.hpp"
#include "vmime/headerFieldFactory.hpp"
#include "vmime/textPartFactory.hpp"
#include "vmime/options.hpp"
2004-10-05 10:28:21 +00:00
#if VMIME_HAVE_MESSAGING_FEATURES
#include "vmime/net/serviceFactory.hpp"
2004-10-05 10:28:21 +00:00
#endif
namespace vmime
{
/** "Null" (empty) string.
*/
const string NULL_STRING;
#if VMIME_WIDE_CHAR_SUPPORT
/** "Null" (empty) wide-char string.
*/
const wstring NULL_WSTRING;
#endif
/** "Null" (empty) text.
*/
const text NULL_TEXT;
/** "Null" (empty) word.
*/
const word NULL_WORD("", vmime::charset(vmime::charsets::US_ASCII));
2004-10-05 10:28:21 +00:00
/** Return the library name (eg. "libvmime").
*
* @return library name
*/
const string libname() { return (VMIME_PACKAGE); }
/** Return the library version (eg. "0.5.2").
*
* @return library version
*/
const string libversion() { return (VMIME_VERSION " (" __DATE__ " " __TIME__ ")"); }
2004-12-30 09:32:32 +00:00
/** Return the library API version (eg. "6:1:6").
*
* @return library API version
*/
const string libapi() { return (VMIME_API); }
2004-10-05 10:28:21 +00:00
// New line sequence to be used when folding header fields.
2004-10-21 15:05:47 +00:00
const string NEW_LINE_SEQUENCE = "\r\n ";
const string::size_type NEW_LINE_SEQUENCE_LENGTH = 1; // space
2004-10-05 10:28:21 +00:00
/** The CR-LF sequence.
*/
2004-10-21 15:05:47 +00:00
const string CRLF = "\r\n";
2004-10-05 10:28:21 +00:00
/** The current MIME version supported by VMime.
*/
const string SUPPORTED_MIME_VERSION = "1.0";
2004-10-05 10:28:21 +00:00
2005-07-12 22:28:02 +00:00
/** Null reference.
*/
const null_ref null = null_ref();
2004-10-05 10:28:21 +00:00
// Line length limits
namespace lineLengthLimits
{
const string::size_type infinite = std::numeric_limits <string::size_type>::max();
}
2004-12-22 14:55:43 +00:00
#ifndef VMIME_BUILDING_DOC
2004-10-05 10:28:21 +00:00
//
// V-Mime Initializer
// ====================
//
// Force instanciation of singletons. This is to prevent problems that might
// happen in multithreaded applications...
//
// WARNING: we put the initializer at the end of this compilation unit. This
// ensures this object is initialized _after_ all other global variables in
// the same compilation unit (in particular "lineLengthLimits::infinite",
// which is used by the generate() function (called from "textPartFactory"
// constructor, for example).
//
class initializer
{
public:
initializer()
{
options::getInstance();
encoderFactory::getInstance();
headerFieldFactory::getInstance();
textPartFactory::getInstance();
#if VMIME_HAVE_MESSAGING_FEATURES
net::serviceFactory::getInstance();
2004-10-05 10:28:21 +00:00
#endif
}
};
initializer theInitializer;
2004-12-22 14:55:43 +00:00
#endif // VMIME_BUILDING_DOC
2004-10-05 10:28:21 +00:00
} // vmime