summaryrefslogtreecommitdiff
path: root/Magick++/lib/CoderInfo.cpp
blob: f156f8233be742dfe6224d7b73735494dfae9f82 (plain)
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
// This may look like C code, but it is really -*- C++ -*-
//
// Copyright Bob Friesenhahn, 2001, 2002
//
// CoderInfo implementation
//

#define MAGICKCORE_IMPLEMENTATION  1
#define MAGICK_PLUSPLUS_IMPLEMENTATION  1

#include "Magick++/Include.h"
#include "Magick++/CoderInfo.h"
#include "Magick++/Exception.h"

using namespace std;

// Default constructor
Magick::CoderInfo::CoderInfo ( void )
  : _name(),
    _description(),
    _mimeType(),
    _isReadable(false),
    _isWritable(false),
    _isMultiFrame(false)
{
}

// Copy constructor
Magick::CoderInfo::CoderInfo ( const Magick::CoderInfo &coder_ )
{
  _name         = coder_._name;
  _description  = coder_._description;
  _mimeType     = coder_._mimeType;
  _isReadable   = coder_._isReadable;
  _isWritable   = coder_._isWritable;
  _isMultiFrame = coder_._isMultiFrame;
}

Magick::CoderInfo::CoderInfo ( const std::string &name_ )
  : _name(),
    _description(),
    _mimeType(),
    _isReadable(false),
    _isWritable(false),
    _isMultiFrame(false)
{
  ExceptionInfo exceptionInfo;
  GetExceptionInfo( &exceptionInfo );
  const Magick::MagickInfo *magickInfo = GetMagickInfo( name_.c_str(),
    &exceptionInfo );
  throwException( exceptionInfo );
  (void) DestroyExceptionInfo( &exceptionInfo );
  if( magickInfo == 0 )
    {
      throwExceptionExplicit(OptionError, "Coder not found", name_.c_str() );
    }
  else
    {
      _name         = string(magickInfo->name);
      _description  = string(magickInfo->description);
      _mimeType     = string(magickInfo->mime_type ? magickInfo->mime_type : "");
      _isReadable   = ((magickInfo->decoder == 0) ? false : true);
      _isWritable   = ((magickInfo->encoder == 0) ? false : true);
      _isMultiFrame = ((magickInfo->adjoin == 0) ? false : true);
    }
}

Magick::CoderInfo::~CoderInfo ( void )
{
  // Nothing to do
}

// Format description
std::string Magick::CoderInfo::description( void ) const
{
  return _description;
}

// Format is readable
bool Magick::CoderInfo::isReadable( void ) const
{
  return _isReadable;
}

// Format is writeable
bool Magick::CoderInfo::isWritable( void ) const
{
  return _isWritable;
}

// Format supports multiple frames
bool Magick::CoderInfo::isMultiFrame( void ) const
{
  return _isMultiFrame;
}

// Format mime type
std::string Magick::CoderInfo::mimeType( void ) const
{
  return _mimeType;
}

// Format name
std::string Magick::CoderInfo::name( void ) const
{
  return _name;
}

// Assignment operator
Magick::CoderInfo& Magick::CoderInfo::operator= ( const CoderInfo &coder_ )
{
  // If not being set to ourself
  if (this != &coder_)
    {
      _name         = coder_._name;
      _description  = coder_._description;
      _mimeType     = coder_._mimeType;
      _isReadable   = coder_._isReadable;
      _isWritable   = coder_._isWritable;
      _isMultiFrame = coder_._isMultiFrame;
    }
  return *this;
}

// Construct from MagickCore::MagickInfo*
Magick::CoderInfo::CoderInfo ( const MagickCore::MagickInfo *magickInfo_ )
  : _name(string(magickInfo_->name ? magickInfo_->name : "")),
    _description(string(magickInfo_->description ? magickInfo_->description : "")),
    _mimeType(string(magickInfo_->mime_type ? magickInfo_->mime_type : "")),
    _isReadable(magickInfo_->decoder ? true : false),
    _isWritable(magickInfo_->encoder ? true : false),
    _isMultiFrame(magickInfo_->adjoin ? true : false)
{
  // Nothing more to do
}