Skip to content

Commit

Permalink
Fixes for OFvariant, dcmiod, dcmseg and dcmpmap.
Browse files Browse the repository at this point in the history
Removed DLL export macros from several template classes as this does not seem
to work for templates.
Introduced a workaround for older C++ compilers regarding base class
definitions in derived classes, e.g. OFvariant<int,char> will not be available
as OFvariant (without the template parameters) in derived classes on these
compilers. OFvariant and DcmIODImage now define the types 'variant' and
'IODImage' resp. instead, which may be used in derived classes for referring
to the resp. base class or one of its methods etc.
  • Loading branch information
Jan Schlamelcher committed Sep 14, 2016
1 parent ed5f4c1 commit 0bbb0be
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 41 deletions.
7 changes: 6 additions & 1 deletion dcmiod/include/dcmtk/dcmiod/iodimage.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,16 @@ class IODImagePixelModule;
* Image Pixel Module.
*/
template<OFVARIADIC_DECLARE_TEMPLATE_PARAMETER_PACK_WITH_DEFAULTS(T)>
class DCMTK_DCMIOD_EXPORT DcmIODImage : public DcmIODCommon
class DcmIODImage : public DcmIODCommon
{

public:

/** typedef for old compilers that do not define the type 'DcmIODImage' in
* derived classes.
*/
typedef DcmIODImage IODImage;

/** A good comment would be nice, but I have nothing in mind
*/
typedef IODImagePixelVariant<OFVARIADIC_TEMPLATE_PARAMETER_PACK(T)> IODImagePixelModuleType;
Expand Down
6 changes: 3 additions & 3 deletions dcmiod/include/dcmtk/dcmiod/modimagepixelvariant.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ struct IODImagePixelVariantBaseVisitor
* and the Double Floating Point Image Pixel module
*/
template<OFVARIADIC_DECLARE_TEMPLATE_PARAMETER_PACK_WITH_DEFAULTS(T)>
class DCMTK_DCMIOD_EXPORT IODImagePixelVariant
class IODImagePixelVariant
: public OFvariant<OFmonostate,OFVARIADIC_TEMPLATE_PARAMETER_PACK(T)>
{

Expand All @@ -65,7 +65,7 @@ class DCMTK_DCMIOD_EXPORT IODImagePixelVariant
/** Constructor
*/
IODImagePixelVariant()
: IODImagePixelVariant::OFvariant()
: IODImagePixelVariant::variant()
{

}
Expand All @@ -74,7 +74,7 @@ class DCMTK_DCMIOD_EXPORT IODImagePixelVariant
*/
template<typename T>
IODImagePixelVariant(const T& t)
: IODImagePixelVariant::OFvariant(t)
: IODImagePixelVariant::variant(t)
{

}
Expand Down
52 changes: 26 additions & 26 deletions dcmpmap/libsrc/dpmparametricmapbase.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,28 @@


DPMParametricMapBase::DPMParametricMapBase()
: DPMParametricMapBase::DcmIODImage()
, m_DPMParametricMapSeriesModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODEnhGeneralEquipmentModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_DPMParametricMapImageModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODMultiFrameFGModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODMultiframeDimensionModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODAcquisitionContextModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODCommonInstanceReferenceModule(DcmIODImage::getData(), DcmIODImage::getRules())
: DPMParametricMapBase::IODImage()
, m_DPMParametricMapSeriesModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODEnhGeneralEquipmentModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_DPMParametricMapImageModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODMultiFrameFGModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODMultiframeDimensionModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODAcquisitionContextModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODCommonInstanceReferenceModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
{
}


template<typename ImagePixel>
DPMParametricMapBase::DPMParametricMapBase(OFin_place_type_t(ImagePixel))
: DPMParametricMapBase::DcmIODImage(OFin_place<ImagePixel>)
, m_DPMParametricMapSeriesModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODEnhGeneralEquipmentModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_DPMParametricMapImageModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODMultiFrameFGModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODMultiframeDimensionModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODAcquisitionContextModule(DcmIODImage::getData(), DcmIODImage::getRules())
, m_IODCommonInstanceReferenceModule(DcmIODImage::getData(), DcmIODImage::getRules())
: DPMParametricMapBase::IODImage(OFin_place<ImagePixel>)
, m_DPMParametricMapSeriesModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODEnhGeneralEquipmentModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_DPMParametricMapImageModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODMultiFrameFGModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODMultiframeDimensionModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODAcquisitionContextModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
, m_IODCommonInstanceReferenceModule(DPMParametricMapBase::IODImage::getData(), DPMParametricMapBase::IODImage::getRules())
{
}

Expand All @@ -59,7 +59,7 @@ DPMParametricMapBase::~DPMParametricMapBase()

void DPMParametricMapBase::clearData()
{
DcmIODImage::clearData();
DPMParametricMapBase::IODImage::clearData();
}


Expand All @@ -72,7 +72,7 @@ OFCondition DPMParametricMapBase::read(DcmItem& dataset)
return IOD_EC_WrongSOPClass;
}

DcmIODImage::read(dataset);
DPMParametricMapBase::IODImage::read(dataset);
m_DPMParametricMapSeriesModule.read(dataset);
m_IODEnhGeneralEquipmentModule.read(dataset);
m_DPMParametricMapImageModule.read(dataset);
Expand Down Expand Up @@ -119,7 +119,7 @@ OFCondition DPMParametricMapBase::write(DcmItem& dataset)
if((result = m_IODMultiframeDimensionModule.write(dataset)).good())
if((result = m_IODAcquisitionContextModule.write(dataset)).good())
if((result = m_IODCommonInstanceReferenceModule.write(dataset)).good())
return DcmIODImage::write(dataset);
return DPMParametricMapBase::IODImage::write(dataset);

return result;
}
Expand All @@ -139,25 +139,25 @@ FGInterface& DPMParametricMapBase::getFunctionalGroups()

IODPatientModule& DPMParametricMapBase::getIODPatientModule()
{
return DcmIODImage::getPatient();
return DPMParametricMapBase::IODImage::getPatient();
}


IODGeneralStudyModule& DPMParametricMapBase::getIODGeneralStudyModule()
{
return DcmIODImage::getStudy();
return DPMParametricMapBase::IODImage::getStudy();
}


IODPatientStudyModule& DPMParametricMapBase::getIODPatientStudyModule()
{
return DcmIODImage::getPatientStudy();
return DPMParametricMapBase::IODImage::getPatientStudy();
}


IODGeneralSeriesModule& DPMParametricMapBase::getIODGeneralSeriesModule()
{
return DcmIODImage::getSeries();
return DPMParametricMapBase::IODImage::getSeries();
}


Expand All @@ -169,7 +169,7 @@ DPMParametricMapSeriesModule& DPMParametricMapBase::getDPMParametricMapSeriesMod

IODGeneralEquipmentModule& DPMParametricMapBase::getIODGeneralEquipmentModule()
{
return DcmIODImage::getEquipment();
return DPMParametricMapBase::IODImage::getEquipment();
}


Expand All @@ -181,7 +181,7 @@ IODEnhGeneralEquipmentModule& DPMParametricMapBase::getIODEnhGeneralEquipmentMod

IODGeneralImageModule& DPMParametricMapBase::getIODGeneralImageModule()
{
return DcmIODImage::getGeneralImage();
return DPMParametricMapBase::IODImage::getGeneralImage();
}


Expand Down Expand Up @@ -217,7 +217,7 @@ IODCommonInstanceReferenceModule& DPMParametricMapBase::getIODCommonInstanceRefe

IODSOPCommonModule& DPMParametricMapBase::getIODSOPCommonModule()
{
return DcmIODImage::getSOPCommon();;
return DPMParametricMapBase::IODImage::getSOPCommon();
}


Expand Down
20 changes: 10 additions & 10 deletions dcmseg/libsrc/segdoc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@

// default constructor (protected, instance creation via create() function)
DcmSegmentation::DcmSegmentation()
: DcmIODImage(OFin_place<IODImagePixelModule<Uint8> >),
m_SegmentationSeries(DcmIODImage::getData(), DcmIODImage::getRules()),
m_EnhancedGeneralEquipmentModule(DcmIODImage::getData(), DcmIODImage::getRules()),
m_FG(DcmIODImage::getData(), DcmIODImage::getRules()),
m_DimensionModule(DcmIODImage::getData(), DcmIODImage::getRules()),
: DcmSegmentation::IODImage(OFin_place<IODImagePixelModule<Uint8> >),
m_SegmentationSeries(DcmSegmentation::IODImage::getData(), DcmSegmentation::IODImage::getRules()),
m_EnhancedGeneralEquipmentModule(DcmSegmentation::IODImage::getData(), DcmSegmentation::IODImage::getRules()),
m_FG(DcmSegmentation::IODImage::getData(), DcmSegmentation::IODImage::getRules()),
m_DimensionModule(DcmSegmentation::IODImage::getData(), DcmSegmentation::IODImage::getRules()),
m_Frames(),
m_ImageType("DERIVED\\PRIMARY"),
m_ContentIdentificationMacro(),
Expand Down Expand Up @@ -220,7 +220,7 @@ OFCondition DcmSegmentation::read(DcmItem &dataset)
}

// Read attributes in base classes
DcmIODImage::read(dataset);
DcmSegmentation::IODImage::read(dataset);

// Read Segmentation Series Module
m_SegmentationSeries.read(dataset);
Expand Down Expand Up @@ -302,7 +302,7 @@ OFCondition DcmSegmentation::write(DcmItem &dataset)
// Multi-frame Functional Groups Module (except functional groups itself)
// SOP Common Module
// Common Instance Reference Module
if (result.good()) result = DcmIODImage::write(dataset);
if (result.good()) result = DcmSegmentation::IODImage::write(dataset);

return result;
}
Expand All @@ -329,7 +329,7 @@ size_t DcmSegmentation::getNumberOfSegments()

IODGeneralEquipmentModule& DcmSegmentation::getEquipment()
{
return DcmIODImage::getEquipment();
return DcmSegmentation::IODImage::getEquipment();
}


Expand Down Expand Up @@ -1004,7 +1004,7 @@ OFCondition DcmSegmentation::writeSegmentationImageModule(DcmItem& dataset)

void DcmSegmentation::clearData()
{
DcmIODImage::clearData();
DcmSegmentation::IODImage::clearData();
m_FG.clearData();
m_FGInterface.clear();
DcmIODUtil::freeContainer(m_Frames);
Expand Down Expand Up @@ -1150,7 +1150,7 @@ OFCondition DcmSegmentation::readSegmentationType(DcmItem& item)
// protected override of public base class function
IODImagePixelModule<Uint8>& DcmSegmentation::getImagePixel()
{
return *OFget<IODImagePixelModule<Uint8> >( &DcmIODImage::getImagePixel() );
return *OFget<IODImagePixelModule<Uint8> >( &DcmSegmentation::IODImage::getImagePixel() );
}


Expand Down
5 changes: 4 additions & 1 deletion ofstd/include/dcmtk/ofstd/variadic/variant.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,9 +239,12 @@ struct OFvariant_const_visit_invoker
// The actual variant implementation. Don't mess with this, look
// at the doxygen API description instead.
template<typename T0=OFvariadic_nil,typename T1=OFvariadic_nil,typename T2=OFvariadic_nil,typename T3=OFvariadic_nil,typename T4=OFvariadic_nil,typename T5=OFvariadic_nil,typename T6=OFvariadic_nil,typename T7=OFvariadic_nil,typename T8=OFvariadic_nil,typename T9=OFvariadic_nil,typename T10=OFvariadic_nil,typename T11=OFvariadic_nil,typename T12=OFvariadic_nil,typename T13=OFvariadic_nil,typename T14=OFvariadic_nil,typename T15=OFvariadic_nil,typename T16=OFvariadic_nil,typename T17=OFvariadic_nil,typename T18=OFvariadic_nil,typename T19=OFvariadic_nil,typename T20=OFvariadic_nil,typename T21=OFvariadic_nil,typename T22=OFvariadic_nil,typename T23=OFvariadic_nil,typename T24=OFvariadic_nil,typename T25=OFvariadic_nil,typename T26=OFvariadic_nil,typename T27=OFvariadic_nil,typename T28=OFvariadic_nil,typename T29=OFvariadic_nil,typename T30=OFvariadic_nil,typename T31=OFvariadic_nil,typename T32=OFvariadic_nil,typename T33=OFvariadic_nil,typename T34=OFvariadic_nil,typename T35=OFvariadic_nil,typename T36=OFvariadic_nil,typename T37=OFvariadic_nil,typename T38=OFvariadic_nil,typename T39=OFvariadic_nil,typename T40=OFvariadic_nil,typename T41=OFvariadic_nil,typename T42=OFvariadic_nil,typename T43=OFvariadic_nil,typename T44=OFvariadic_nil,typename T45=OFvariadic_nil,typename T46=OFvariadic_nil,typename T47=OFvariadic_nil,typename T48=OFvariadic_nil,typename T49=OFvariadic_nil>
class DCMTK_OFSTD_EXPORT OFvariant
class OFvariant
{
public:
// typedef for old compilers that do not define the type 'OFvariant' in derived classes
typedef OFvariant variant;

OFvariant()
#ifdef OFalign
: m_Content()
Expand Down

0 comments on commit 0bbb0be

Please sign in to comment.