/usr/include/CLAM/XMLAdapter.hxx is in libclam-dev 1.4.0-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | /*
* Copyright (c) 2001-2004 MUSIC TECHNOLOGY GROUP (MTG)
* UNIVERSITAT POMPEU FABRA
*
*
* 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.
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
//////////////////////////////////////////////////////////////////////
// Class XMLAdapter
//
#ifndef _XMLAdapter_
#define _XMLAdapter_
#include "BasicXMLable.hxx"
#include <sstream>
#include <string>
namespace CLAM {
/**
* @ingroup XmlAdapters
* @brief This class adapts to the XMLable interface any basic object.
*
* A basic object is that one that has
* the insertion (<<) and extractor (>>) operators defined to streams
* and there exists a TypeInfo struct for it (see CLAM_TYPE_INFO_GROUP).
* The adapter uses such operators to calculate the XML content on writing
* and reconstruct the object on reading.
*
* During the construction, the adapter stores a reference to
* the adaptee. The content string extracted on demand when the
* adapter is stored on a XMLStorage, so the adapter is sensitive
* to the adaptee changes after the construction.
*
* <B>Important:</B> At storage time, the adaptee must exist in
* order to follow the reference.
*
* <B>Pay attention to the management of the name memory</B>
* @see BasicXMLable
* @see XMLable
*/
template <class T> class XMLAdapter : public BasicXMLable {
// Internal Types
public:
typedef BasicXMLable super;
typedef T t_adaptee;
// Attributes
private:
t_adaptee & mAdaptee;
// Construction/Destruction
public:
/**
* Constructs a XMLAdapter
* @param anAdaptee The object to be adapted (where the
* XML content will be extracted from)
* @param name A pointer to a 0 terminated string
* containing the xml name (for elements and attributes)
* or 0 (the default) if the element is neither an
* element nor an attribute (@see #BasicXMLable for
* important details about memory managing).
* <B>Because no internal copy of the string is done, the
* 0 terminated string pointed by <EM>name</EM> must
* exist during the BasicXMLable life as is directly used.</B>
* @param isXMLElement Tells whether the object is an
* element or an attribute when the name is defined.
*/
XMLAdapter (t_adaptee & anAdaptee, const char * name=NULL, bool isXMLElement=false)
: BasicXMLable(name, isXMLElement), mAdaptee(anAdaptee)
{
}
XMLAdapter (const t_adaptee & anAdaptee, const char * name=NULL, bool isXMLElement=false)
: BasicXMLable(name, isXMLElement), mAdaptee(const_cast<T&>(anAdaptee))
{
}
virtual ~XMLAdapter()
{
};
// Accessors
public:
//* @return A string with the extracted XML content
std::string XMLContent() const
{
std::stringstream str;
str << mAdaptee << std::ends;
return str.str();
}
//* Extracts the content from the stream.
bool XMLContent(std::istream & str)
{
str >> mAdaptee;
return str!=NULL;
}
// Testing
public:
//* Check the internal status for a class instance is valid
bool FulfilsInvariant()
{
return super::FulfilsInvariant();
}
};
}
#endif//_XMLAdapter_
|