/usr/include/CLAM/Filename.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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | /*
* 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
*
*/
#ifndef _FILENAME_H_
#define _FILENAME_H_
#include <exception>
#include <iosfwd>
#include "Text.hxx"
#include "Assert.hxx"
#include "Component.hxx"
#include "TypeInfo.hxx"
#include <string>
namespace CLAM {
/**
* This class is a base class for configuration fields representing file names.
* By deriving from Text you have most of the std::string operations available
* and input serialization supporting spaces on reading.
*
* Use InFilename and OutFilename subclasses to discriminate the serialization
* direction
* and subclass them to specify concrete filters and file type family names.
* @sa DirectoryName
*/
class Filename : public Text
{
public:
/// Item of a Filename filter definition
struct Filter {
const char * description;
const char * wildcard;
};
Filename() {}
Filename(const std::string & s) : Text(s) {}
Filename(const char * s) : Text(s) {}
virtual ~Filename() {}
/// Rewrite this method to set a name for the type family name.
/// It is used to build messages such as 'Open the audio file'
/// where 'audio' is the type family.
virtual const char * TypeFamily() const { return ""; }
/// Rewrite this method to define the set of filters that subclasses
/// bounds to. See the examples on how to return it.
/// Last item should be {0,0} for class users to stop iterating.
virtual const Filter * Filters() const {
static const Filter filters[] = {
{0, 0}
};
return filters;
}
};
/**
* Input file name configuration field.
*
* Common operations on std::string are available to this field.
* Specialize this class for concrete input file formats
* by redefining Filename::Filter and Filename::TypeFamily.
*
@code
class InImageFilename : public InFilename
{
public:
InImageFilename(const std::string & s="") : InFilename(s) {}
InImageFilename(const char * s) : InFilename(s) {}
virtual const char * TypeFamily() const { return "Image"; }
virtual const Filter * Filters() const
{
static const Filter filters[] = {
{"Portable Network Graphics", "*.png"},
{"JPEG Image", "*.jpg"},
{"Scalable Vector Graphics", "*.svg"},
{0,0}
};
return filters;
}
};
CLAM_TYPEINFOGROUP(BasicCTypeInfo, InImageFilename);
@endcode
@see OutFilename
*/
class InFilename : public Filename
{
public:
InFilename(const std::string & s="") : Filename(s) {}
InFilename(const char * s) : Filename(s) {}
};
/**
* Output file name configuration field.
*
* Common operations on std::string are available to this field.
* Specialize this class for concrete input file formats
* by redefining Filename::Filter and Filename::TypeFamily.
*
@code
class OutImageFilename : public OutFilename
{
public:
OutImageFilename(const std::string & s="") : OutFilename(s) {}
OutImageFilename(const char * s) : OutFilename(s) {}
virtual const char * TypeFamily() const { return "Image"; }
virtual const Filter * Filters() const
{
static const Filter filters[] = {
{"Portable Network Graphics", "*.png"},
{"JPEG Image", "*.jpg"},
{0,0}
};
return filters;
}
};
CLAM_TYPEINFOGROUP(BasicCTypeOutfo, OutImageFilename);
@endcode
@see InFilename
*/
class OutFilename : public Filename
{
public:
OutFilename(const std::string & s="") : Filename(s) {}
OutFilename(const char * s) : Filename(s) {}
};
CLAM_TYPEINFOGROUP(BasicCTypeInfo, Filename);
CLAM_TYPEINFOGROUP(BasicCTypeInfo, InFilename);
CLAM_TYPEINFOGROUP(BasicCTypeInfo, OutFilename);
}
#endif // _FILENAME_H_
|