]> granicus.if.org Git - imagemagick/blob - Magick++/lib/CoderInfo.cpp
(no commit message)
[imagemagick] / Magick++ / lib / CoderInfo.cpp
1 // This may look like C code, but it is really -*- C++ -*-
2 //
3 // Copyright Bob Friesenhahn, 2001, 2002
4 //
5 // CoderInfo implementation
6 //
7
8 #define MAGICKCORE_IMPLEMENTATION  1
9 #define MAGICK_PLUSPLUS_IMPLEMENTATION  1
10
11 #include "Magick++/Include.h"
12 #include "Magick++/CoderInfo.h"
13 #include "Magick++/Exception.h"
14
15 using namespace std;
16
17 // Default constructor
18 Magick::CoderInfo::CoderInfo ( void )
19   : _name(),
20     _description(),
21     _isReadable(false),
22     _isWritable(false),
23     _isMultiFrame(false)
24 {
25 }
26
27 // Copy constructor
28 Magick::CoderInfo::CoderInfo ( const Magick::CoderInfo &coder_ )
29 {
30   _name         = coder_._name;
31   _description  = coder_._description;
32   _isReadable   = coder_._isReadable;
33   _isWritable   = coder_._isWritable;
34   _isMultiFrame = coder_._isMultiFrame;
35 }
36
37 Magick::CoderInfo::CoderInfo ( const std::string &name_ )
38   : _name(),
39     _description(),
40     _isReadable(false),
41     _isWritable(false),
42     _isMultiFrame(false)
43 {
44   ExceptionInfo exceptionInfo;
45   GetExceptionInfo( &exceptionInfo );
46   const Magick::MagickInfo *magickInfo = GetMagickInfo( name_.c_str(), &exceptionInfo );
47   throwException( exceptionInfo );
48   (void) DestroyExceptionInfo( &exceptionInfo );
49   if( magickInfo == 0 )
50     {
51       throwExceptionExplicit(OptionError, "Coder not found", name_.c_str() );
52     }
53   else
54     {
55       _name         = string(magickInfo->name);
56       _description  = string(magickInfo->description);
57       _isReadable   = ((magickInfo->decoder == 0) ? false : true);
58       _isWritable   = ((magickInfo->encoder == 0) ? false : true);
59       _isMultiFrame = ((magickInfo->adjoin == 0) ? false : true);
60     }
61 }
62
63 Magick::CoderInfo::~CoderInfo ( void )
64 {
65   // Nothing to do
66 }
67
68 // Format name
69 std::string Magick::CoderInfo::name( void ) const
70 {
71   return _name;
72 }
73
74 // Format description
75 std::string Magick::CoderInfo::description( void ) const
76 {
77   return _description;
78 }
79
80 // Format is readable
81 bool Magick::CoderInfo::isReadable( void ) const
82 {
83   return _isReadable;
84 }
85
86 // Format is writeable
87 bool Magick::CoderInfo::isWritable( void ) const
88 {
89   return _isWritable;
90 }
91
92 // Format supports multiple frames
93 bool Magick::CoderInfo::isMultiFrame( void ) const
94 {
95   return _isMultiFrame;
96 }
97
98 // Assignment operator
99 Magick::CoderInfo& Magick::CoderInfo::operator= (const CoderInfo &coder_ )
100 {
101   // If not being set to ourself
102   if (this != &coder_)
103     {
104       _name         = coder_._name;
105       _description  = coder_._description;
106       _isReadable   = coder_._isReadable;
107       _isWritable   = coder_._isWritable;
108       _isMultiFrame = coder_._isMultiFrame;
109     }
110   return *this;
111 }
112
113 // Construct from MagickCore::MagickInfo*
114 Magick::CoderInfo::CoderInfo ( const MagickCore::MagickInfo *magickInfo_ )
115   : _name(string(magickInfo_->name ? magickInfo_->name : "")),
116     _description(string(magickInfo_->description ? magickInfo_->description : "")),
117     _isReadable(magickInfo_->decoder ? true : false),
118     _isWritable(magickInfo_->encoder ? true : false),
119     _isMultiFrame(magickInfo_->adjoin ? true : false)
120 {
121   // Nothing more to do
122 }