blob: 9d085566f295f48411d6c5bff897604b26c39a2f [file] [log] [blame]
cristy3ed852e2009-09-05 21:47:34 +00001// 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
cristy3225a072010-04-17 01:47:28 +00009#define MAGICK_PLUSPLUS_IMPLEMENTATION 1
cristy3ed852e2009-09-05 21:47:34 +000010
11#include "Magick++/Include.h"
12#include "Magick++/CoderInfo.h"
13#include "Magick++/Exception.h"
14
15using namespace std;
16
cristy3225a072010-04-17 01:47:28 +000017// Default constructor
18Magick::CoderInfo::CoderInfo ( void )
19 : _name(),
20 _description(),
21 _isReadable(false),
22 _isWritable(false),
23 _isMultiFrame(false)
24{
25}
26
27// Copy constructor
28Magick::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
cristy3ed852e2009-09-05 21:47:34 +000037Magick::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
63Magick::CoderInfo::~CoderInfo ( void )
64{
65 // Nothing to do
66}
67
68// Format name
69std::string Magick::CoderInfo::name( void ) const
70{
71 return _name;
72}
73
74// Format description
75std::string Magick::CoderInfo::description( void ) const
76{
77 return _description;
78}
79
80// Format is readable
81bool Magick::CoderInfo::isReadable( void ) const
82{
83 return _isReadable;
84}
85
86// Format is writeable
87bool Magick::CoderInfo::isWritable( void ) const
88{
89 return _isWritable;
90}
91
92// Format supports multiple frames
93bool Magick::CoderInfo::isMultiFrame( void ) const
94{
95 return _isMultiFrame;
96}
97
cristy3225a072010-04-17 01:47:28 +000098// Assignment operator
99Magick::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
cristy3ed852e2009-09-05 21:47:34 +0000113// Construct from MagickCore::MagickInfo*
114Magick::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}