From 74ff88b21380c0df8739581ab24f52652e742270 Mon Sep 17 00:00:00 2001 From: dirk Date: Thu, 8 Jan 2015 21:46:22 +0000 Subject: [PATCH] Added canReadMultiThreaded and canWriteMultiThreaded to CoderInfo. --- Magick++/lib/CoderInfo.cpp | 65 +++++++++++++++++++------------ Magick++/lib/Magick++/CoderInfo.h | 19 ++++++--- Magick++/lib/Magick++/Include.h | 16 ++++++++ 3 files changed, 69 insertions(+), 31 deletions(-) diff --git a/Magick++/lib/CoderInfo.cpp b/Magick++/lib/CoderInfo.cpp index 070360768..f3511dd8f 100644 --- a/Magick++/lib/CoderInfo.cpp +++ b/Magick++/lib/CoderInfo.cpp @@ -1,7 +1,7 @@ // This may look like C code, but it is really -*- C++ -*- // // Copyright Bob Friesenhahn, 2001, 2002 -// Copyright Dirk Lemstra 2013-2014 +// Copyright Dirk Lemstra 2013-2015 // // CoderInfo implementation // @@ -16,32 +16,35 @@ using namespace std; Magick::CoderInfo::CoderInfo(void) - : _name(), - _description(), - _mimeType(), + : _description(), + _isMultiFrame(false), _isReadable(false), _isWritable(false), - _isMultiFrame(false) + _mimeType(), + _name(), + _threadSupport(NoThreadSupport) { } Magick::CoderInfo::CoderInfo(const Magick::CoderInfo &coder_) + : _description(coder_._description), + _isMultiFrame(coder_._isMultiFrame), + _isReadable(coder_._isReadable), + _isWritable(coder_._isWritable), + _mimeType(coder_._mimeType), + _name(coder_._name), + _threadSupport(coder_._threadSupport) { - _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(), + : _description(), + _isMultiFrame(false), _isReadable(false), _isWritable(false), - _isMultiFrame(false) + _mimeType(), + _name(), + _threadSupport(NoThreadSupport) { const Magick::MagickInfo *magickInfo; @@ -50,17 +53,18 @@ Magick::CoderInfo::CoderInfo(const std::string &name_) magickInfo=GetMagickInfo(name_.c_str(),exceptionInfo); ThrowPPException; if (magickInfo == 0) - { - throwExceptionExplicit(OptionError,"Coder not found",name_.c_str()); - } + throwExceptionExplicit(OptionError,"Coder not found",name_.c_str()); else { - _name=string(magickInfo->name); _description=string(magickInfo->description); + _isMultiFrame=((magickInfo->adjoin == MagickFalse) ? false : true); + _isReadable=((magickInfo->decoder == (MagickCore::DecodeImageHandler *) + NULL) ? false : true); + _isWritable=((magickInfo->encoder == (MagickCore::EncodeImageHandler *) + NULL) ? false : true); _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); + _name=string(magickInfo->name); + _threadSupport=magickInfo->thread_support; } } @@ -73,16 +77,27 @@ 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; + _isMultiFrame=coder_._isMultiFrame; _isReadable=coder_._isReadable; _isWritable=coder_._isWritable; - _isMultiFrame=coder_._isMultiFrame; + _mimeType=coder_._mimeType; + _name=coder_._name; + _threadSupport=coder_._threadSupport; } return(*this); } +bool Magick::CoderInfo::canReadMultiThreaded(void) const +{ + return((_threadSupport & DecoderThreadSupport) == DecoderThreadSupport); +} + +bool Magick::CoderInfo::canWriteMultiThreaded(void) const +{ + return((_threadSupport & EncoderThreadSupport) == EncoderThreadSupport); +} + std::string Magick::CoderInfo::description(void) const { return(_description); diff --git a/Magick++/lib/Magick++/CoderInfo.h b/Magick++/lib/Magick++/CoderInfo.h index 7b52f81c6..ede59c089 100644 --- a/Magick++/lib/Magick++/CoderInfo.h +++ b/Magick++/lib/Magick++/CoderInfo.h @@ -41,6 +41,12 @@ namespace Magick // Assignment operator CoderInfo& operator=(const CoderInfo &coder_); + // Format can read multi-threaded + bool canReadMultiThreaded(void) const; + + // Format can write multi-threaded + bool canWriteMultiThreaded(void) const; + // Format description std::string description(void) const; @@ -63,12 +69,13 @@ namespace Magick bool unregister(void) const; private: - std::string _name; - std::string _description; - std::string _mimeType; - bool _isReadable; - bool _isWritable; - bool _isMultiFrame; + std::string _description; + bool _isMultiFrame; + bool _isReadable; + bool _isWritable; + std::string _mimeType; + std::string _name; + MagickStatusType _threadSupport; }; } // namespace Magick diff --git a/Magick++/lib/Magick++/Include.h b/Magick++/lib/Magick++/Include.h index d65feeebd..3d7d84198 100644 --- a/Magick++/lib/Magick++/Include.h +++ b/Magick++/lib/Magick++/Include.h @@ -271,6 +271,7 @@ namespace Magick using MagickCore::Quantum; using MagickCore::MagickRealType; using MagickCore::MagickSizeType; + using MagickCore::MagickStatusType; // Boolean types using MagickCore::MagickBooleanType; @@ -973,8 +974,17 @@ namespace Magick using MagickCore::InverseColorInterpolate; // Statistic type + using MagickCore::StatisticType; + using MagickCore::UndefinedStatistic; + using MagickCore::GradientStatistic; + using MagickCore::MaximumStatistic; + using MagickCore::MeanStatistic; using MagickCore::MedianStatistic; + using MagickCore::MinimumStatistic; + using MagickCore::ModeStatistic; using MagickCore::NonpeakStatistic; + using MagickCore::RootMeanSquareStatistic; + using MagickCore::StandardDeviationStatistic; // StorageType type using MagickCore::StorageType; @@ -1009,6 +1019,12 @@ namespace Magick using MagickCore::ObliqueStyle; using MagickCore::AnyStyle; + // Thread support type + using MagickCore::MagickThreadSupport; + using MagickCore::NoThreadSupport; + using MagickCore::DecoderThreadSupport; + using MagickCore::EncoderThreadSupport; + // Virtual pixel methods using MagickCore::VirtualPixelMethod; using MagickCore::UndefinedVirtualPixelMethod; -- 2.40.0