IccMAX 2.1.27
Color Profile Tools
Loading...
Searching...
No Matches
CIccTagNum< T, Tsig > Class Template Reference

#include <IccTagBasic.h>

+ Inheritance diagram for CIccTagNum< T, Tsig >:
+ Collaboration diagram for CIccTagNum< T, Tsig >:

Public Member Functions

 CIccTagNum (const CIccTagNum< T, Tsig > &ITNum)
 
 CIccTagNum (int nSize=1)
 
virtual ~CIccTagNum ()
 
void Describe (std::string &sDescription, int nVerboseness)
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 
virtual void DetachIO ()
 
virtual const icCharGetClassName () const
 
virtual IIccExtensionTagGetExtension ()
 
virtual icUInt32Number GetNumValues () const
 
icUInt32Number GetSize () const
 Returns the size of the data array.
 
virtual icArraySignature GetTagArrayType () const
 
virtual icStructSignature GetTagStructType () const
 
virtual icTagTypeSignature GetType () const
 
bool GetValues (icFloatNumber *DstVector, icUInt32Number nStart, icUInt32Number nVectorSize) const
 
bool GetValues (icFloatNumber *DstVector, icUInt32Number nStart, icUInt32Number nVectorSize) const
 
virtual bool GetValues (icFloatNumber *DstVector, icUInt32Number nStart=0, icUInt32Number nVectorSize=1) const
 
bool Interpolate (icFloatNumber *DstVector, icFloatNumber pos, icUInt32Number nVectorSize, icFloatNumber *zeroVals) const
 
bool Interpolate (icFloatNumber *DstVector, icFloatNumber pos, icUInt32Number nVectorSize, icFloatNumber *zeroVals) const
 
virtual bool Interpolate (icFloatNumber *DstVector, icFloatNumber val, icUInt32Number nVectorSize=1, icFloatNumber *zeroVals=NULL) const
 
virtual bool IsArrayType ()
 
virtual bool IsMatrixArray () const
 
virtual bool IsMBBType ()
 
virtual bool IsNumArrayType () const
 
virtual bool IsSupported ()
 
virtual CIccTagNewCopy () const
 
CIccTagNumoperator= (const CIccTagNum< T, Tsig > &NumTag)
 
T & operator[] (icUInt32Number index)
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 
virtual bool Read (icUInt32Number size, CIccIO *pIO, CIccProfile *pProfile)
 
virtual bool ReadAll ()
 
bool SetSize (icUInt32Number nSize, bool bZeroNew=true)
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 
bool ValuePos (icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
 
bool ValuePos (icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
 
virtual bool ValuePos (icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
 
virtual bool Write (CIccIO *pIO)
 

Static Public Member Functions

static CIccTagCreate (icTagTypeSignature sig)
 

Data Fields

icUInt32Number m_nReserved
 

Protected Attributes

icUInt32Number m_nSize
 
T * m_Num
 

Detailed Description

template<class T, icTagTypeSignature Tsig>
class CIccTagNum< T, Tsig >

Class: CIccTagNum

Purpose: A template class for arrays of integers

Derived Tags: CIccTagUInt8, CIccTagUInt16, CIccTagUInt32 and CIccTagUInt64

Constructor & Destructor Documentation

◆ CIccTagNum() [1/2]

template<class T , icTagTypeSignature Tsig>
CIccTagNum< T, Tsig >::CIccTagNum ( int  nSize = 1)

Name: CIccTagNum::CIccTagNum

Purpose: Constructor

Args: nSize = number of data entries

5600{
5601 m_nSize = nSize;
5602 if (m_nSize <1)
5603 m_nSize = 1;
5604 m_Num = (T*)calloc(nSize, sizeof(T));
5605}
T * m_Num
Definition IccTagBasic.h:1004
icUInt32Number m_nSize
Definition IccTagBasic.h:1005

References CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

◆ CIccTagNum() [2/2]

template<class T , icTagTypeSignature Tsig>
CIccTagNum< T, Tsig >::CIccTagNum ( const CIccTagNum< T, Tsig > &  ITNum)

Name: CIccTagNum::CIccTagNum

Purpose: Copy Constructor

Args: ITNum = The CIccTagNum object to be copied

5620{
5621 m_nSize = ITNum.m_nSize;
5622
5623 m_Num = (T*)calloc(m_nSize, sizeof(T));
5624 memcpy(m_Num, ITNum.m_Num, m_nSize * sizeof(T));
5625}

References CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

◆ ~CIccTagNum()

template<class T , icTagTypeSignature Tsig>
CIccTagNum< T, Tsig >::~CIccTagNum ( )
virtual

Name: CIccTagNum::~CIccTagNum

Purpose: Destructor

5664{
5665 if (m_Num)
5666 free(m_Num);
5667}

References CIccTagNum< T, Tsig >::m_Num.

Member Function Documentation

◆ Create()

CIccTag * CIccTag::Create ( icTagTypeSignature  sig)
staticinherited

Name: CIccTag::Create

Purpose: This is a static tag creator based upon tag signature type

Args: sig = tag type signature

Return: Pointer to Allocated tag

144{
145 return CIccTagCreator::CreateTag(sig);
146}
static CIccTag * CreateTag(icTagTypeSignature tagTypeSig)
Definition IccTagFactory.h:279

References CIccTagCreator::CreateTag().

Referenced by CIccDefaultEncProfileConverter::ConvertFromParams(), CIccTagStruct::LoadElem(), CIccProfileXml::ParseTag(), CIccTagXmlStruct::ParseTag(), CIccMpeXmlTintArray::ParseXml(), CIccTagXmlArray::ParseXml(), CIccMpeTintArray::Read(), CIccTagLutAtoB::Read(), CIccTagLut8::Read(), CIccTagLut16::Read(), CIccTagLut8::SetColorSpaces(), CIccTagLut16::SetColorSpaces(), and CIccProfileDescText::SetType().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Describe() [1/2]

void CIccTagNum< icUInt64Number, icSigUInt64ArrayType >::Describe ( std::string &  sDescription,
int  nVerboseness 
)
virtual

Function: Describe(sDescription) Each derived tag will implement it's own Describe() function.

Parameter(s): sDescription - A string to put the tag's description into.

  • verbosenss - integer value. Default=0. The larger the value, the more verbose the output.

Reimplemented from CIccTag.

5892{
5893 icChar buf[128];
5894
5895 if (m_nSize == 1 ) {
5896 sprintf(buf, "Value = %llu (0x016%llx)\n", m_Num[0], m_Num[0]);
5897 sDescription += buf;
5898 }
5899 else {
5901 sDescription.reserve(sDescription.size() + m_nSize*79);
5902
5903 for (i=0; i<m_nSize; i++) {
5904 sprintf(buf, "Value = %llu (0x016%llx)\n", m_Num[i], m_Num[i]);
5905 sDescription += buf;
5906 }
5907 }
5908}
unsigned long icUInt32Number
Definition icProfileHeader.h:262
char icChar
Definition IccDefs.h:110

◆ Describe() [2/2]

template<class T , icTagTypeSignature Tsig>
void CIccTagNum< T, Tsig >::Describe ( std::string &  sDescription,
int  nVerboseness 
)
virtual

Name: CIccTagNum::Describe

Purpose: Dump data associated with the tag to a string

Args: sDescription - string to concatenate tag dump to

Reimplemented from CIccTag.

5817{
5818 icChar buf[128] = {0};
5819
5820 if (m_nSize == 1 ) {
5821 switch (sizeof(T)) {
5822 case 1:
5823 sprintf(buf, "Value = %u (0x02%x)\n", m_Num[0], m_Num[0]);
5824 break;
5825 case 2:
5826 sprintf(buf, "Value = %u (0x04%x)\n", m_Num[0], m_Num[0]);
5827 break;
5828 case 4:
5829 sprintf(buf, "Value = %u (0x08%x)\n", m_Num[0], m_Num[0]);
5830 break;
5831 case 8:
5832 sprintf(buf, "Value = %u (0x016%x)\n", m_Num[0], m_Num[0]);
5833 break;
5834 default:
5835 sprintf(buf, "Value = %u (0x%x)\n", m_Num[0], m_Num[0]);
5836 break;
5837 }
5838 sDescription += buf;
5839 }
5840 else {
5842 sDescription.reserve(sDescription.size() + m_nSize*79);
5843
5844 for (i=0; i<m_nSize; i++) {
5845 switch (sizeof(T)) {
5846 case 1:
5847 sprintf(buf, "Value = %u (0x02%x)\n", m_Num[i], m_Num[i]);
5848 break;
5849 case 2:
5850 sprintf(buf, "Value = %u (0x04%x)\n", m_Num[i], m_Num[i]);
5851 break;
5852 case 4:
5853 sprintf(buf, "Value = %u (0x08%x)\n", m_Num[i], m_Num[i]);
5854 break;
5855 case 8:
5856 sprintf(buf, "Value = %u (0x016%x)\n", m_Num[i], m_Num[i]);
5857 break;
5858 default:
5859 sprintf(buf, "Value = %u (0x%x)\n", m_Num[i], m_Num[i]);
5860 break;
5861 }
5862 sDescription += buf;
5863 }
5864 }
5865}

References CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

◆ DetachIO()

virtual void CIccTag::DetachIO ( )
inlinevirtualinherited

Function: ReadAll() - Read All sub data for tag from file. Called by CIccProfile::ReadAll() to read all sub data for tag

Returns true if ReadAll is successful.

183{}

◆ GetClassName()

template<class T , icTagTypeSignature Tsig>
const icChar * CIccTagNum< T, Tsig >::GetClassName ( ) const
virtual

Name: CIccTagNum::GetClassName

Purpose: Returns the tag type class name

Reimplemented from CIccTag.

Reimplemented in CIccTagXmlNum< T, A, Tsig >.

5679{
5680 if (sizeof(T)==sizeof(icUInt8Number))
5681 return "CIccTagUInt8";
5682 else if (sizeof(T)==sizeof(icUInt16Number))
5683 return "CIccTagUInt16";
5684 else if (sizeof(T)==sizeof(icUInt32Number))
5685 return "CIccTagUInt32";
5686 else if (sizeof(T)==sizeof(icUInt64Number))
5687 return "CIccTagUInt64";
5688 else
5689 return "CIccTagNum<>";
5690}
unsigned char icUInt8Number
Definition icProfileHeader.h:250
unsigned short icUInt16Number
Definition icProfileHeader.h:256
icUInt32Number icUInt64Number[2]
Definition icProfileHeader.h:268

◆ GetExtension()

virtual IIccExtensionTag * CIccTag::GetExtension ( )
inlinevirtualinherited

Reimplemented in CIccTagXmlUnknown, CIccTagXmlText, CIccTagXmlUtf8Text, CIccTagXmlZipUtf8Text, CIccTagXmlZipXml, CIccTagXmlUtf16Text, CIccTagXmlTextDescription, CIccTagXmlSignature, CIccTagXmlNamedColor2, CIccTagXmlXYZ, CIccTagXmlChromaticity, CIccTagXmlCicp, CIccTagXmlSparseMatrixArray, CIccTagXmlFixedNum< T, Tsig >, CIccTagXmlNum< T, A, Tsig >, CIccTagXmlFloatNum< T, A, Tsig >, CIccTagXmlMeasurement, CIccTagXmlMultiLocalizedUnicode, CIccTagXmlTagData, CIccTagXmlDateTime, CIccTagXmlColorantOrder, CIccTagXmlColorantTable, CIccTagXmlViewingConditions, CIccTagXmlSpectralDataInfo, CIccTagXmlSpectralViewingConditions, CIccTagXmlProfileSeqDesc, CIccTagXmlResponseCurveSet16, CIccTagXmlCurve, CIccTagXmlParametricCurve, CIccTagXmlSegmentedCurve, CIccTagXmlLutAtoB, CIccTagXmlLutBtoA, CIccTagXmlLut8, CIccTagXmlLut16, CIccTagXmlMultiProcessElement, CIccTagXmlProfileSequenceId, CIccTagXmlDict, CIccTagXmlStruct, CIccTagXmlArray, CIccTagXmlGamutBoundaryDesc, CIccTagXmlEmbeddedHeightImage, CIccTagXmlEmbeddedNormalImage, and CIccTagXmlEmbeddedProfile.

143{return NULL;}

Referenced by icCurvesFromXml(), icCurvesToXml(), icProfDescToXml(), icXmlParseProfDesc(), CIccProfileXml::ParseTag(), CIccTagXmlStruct::ParseTag(), CIccMpeXmlTintArray::ParseXml(), CIccTagXmlArray::ParseXml(), CIccMpeXmlTintArray::ToXml(), CIccTagXmlStruct::ToXml(), CIccTagXmlArray::ToXml(), and CIccProfileXml::ToXmlWithBlanks().

+ Here is the caller graph for this function:

◆ GetNumValues()

template<class T , icTagTypeSignature Tsig>
virtual icUInt32Number CIccTagNum< T, Tsig >::GetNumValues ( ) const
inlinevirtual

Implements CIccTagNumArray.

993{ return GetSize(); }
icUInt32Number GetSize() const
Returns the size of the data array.
Definition IccTagBasic.h:987

References CIccTagNum< T, Tsig >::GetSize().

+ Here is the call graph for this function:

◆ GetSize()

template<class T , icTagTypeSignature Tsig>
icUInt32Number CIccTagNum< T, Tsig >::GetSize ( ) const
inline

Returns the size of the data array.

987{ return m_nSize; }

References CIccTagNum< T, Tsig >::m_nSize.

Referenced by CIccTagNum< T, Tsig >::GetNumValues().

+ Here is the caller graph for this function:

◆ GetTagArrayType()

virtual icArraySignature CIccTag::GetTagArrayType ( ) const
inlinevirtualinherited

Reimplemented in CIccTagArray.

133{ return icSigUndefinedArray; }
@ icSigUndefinedArray
Definition icProfileHeader.h:617

References icSigUndefinedArray.

Referenced by icGetTagArrayHandlerOfType(), and CIccProfileXml::ParseTag().

+ Here is the caller graph for this function:

◆ GetTagStructType()

virtual icStructSignature CIccTag::GetTagStructType ( ) const
inlinevirtualinherited

Reimplemented in CIccTagStruct.

132{ return icSigUndefinedStruct; }
@ icSigUndefinedStruct
Definition icProfileHeader.h:606

References icSigUndefinedStruct.

Referenced by icGetTagStructHandlerOfType(), CIccArrayColorantInfo::Validate(), and CIccArrayNamedColor::Validate().

+ Here is the caller graph for this function:

◆ GetType()

template<class T , icTagTypeSignature Tsig>
virtual icTagTypeSignature CIccTagNum< T, Tsig >::GetType ( ) const
inlinevirtual

Function: GetType()

Purpose: Get Tag Type. Each derived tag will implement it's own GetType() function.

Reimplemented from CIccTag.

976{ return Tsig; }

Referenced by CIccTagNum< T, Tsig >::Write().

+ Here is the caller graph for this function:

◆ GetValues() [1/3]

bool CIccTagNum< icUInt32Number, icSigUInt32ArrayType >::GetValues ( icFloatNumber DstVector,
icUInt32Number  nStart,
icUInt32Number  nVectorSize 
) const
virtual

Implements CIccTagNumArray.

5986{
5987 return false;
5988}

◆ GetValues() [2/3]

bool CIccTagNum< icUInt64Number, icSigUInt64ArrayType >::GetValues ( icFloatNumber DstVector,
icUInt32Number  nStart,
icUInt32Number  nVectorSize 
) const
virtual

Implements CIccTagNumArray.

5991{
5992 return false;
5993}

◆ GetValues() [3/3]

template<class T , icTagTypeSignature Tsig>
bool CIccTagNum< T, Tsig >::GetValues ( icFloatNumber DstVector,
icUInt32Number  nStart = 0,
icUInt32Number  nVectorSize = 1 
) const
virtual

Name: CIccTagNum::GetValues

Purpose: Gets values from the num array tag as floating point numbers

Args: nSize - number of data entries, bZeroNew - flag to zero newly formed values

Implements CIccTagNumArray.

5958{
5959 if (nVectorSize+nStart >m_nSize)
5960 return false;
5961
5963
5964 switch (Tsig) {
5966 for (i=0; i<m_nSize; i++) {
5967 DstVector[i] = icU8toF((icUInt8Number)(m_Num[i+nStart]));
5968 }
5969 break;
5971 for (i=0; i<m_nSize; i++) {
5972 DstVector[i] = icU16toF((icUInt16Number)(m_Num[i+nStart]));
5973 }
5974 break;
5975 case icSigUInt32ArrayType: //Not Supported
5976 case icSigUInt64ArrayType: //Not Supported
5977 default:
5978 return false;
5979 }
5980 return true;
5981}
@ icSigUInt8ArrayType
Definition icProfileHeader.h:572
@ icSigUInt16ArrayType
Definition icProfileHeader.h:569
@ icSigUInt64ArrayType
Definition icProfileHeader.h:571
@ icSigUInt32ArrayType
Definition icProfileHeader.h:570
ICCPROFLIB_API icFloatNumber icU8toF(icUInt8Number num)
Definition IccUtil.cpp:738
ICCPROFLIB_API icFloatNumber icU16toF(icUInt16Number num)
Definition IccUtil.cpp:759

References icSigUInt16ArrayType, icSigUInt32ArrayType, icSigUInt64ArrayType, icSigUInt8ArrayType, icU16toF(), icU8toF(), CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

+ Here is the call graph for this function:

◆ Interpolate() [1/3]

bool CIccTagNum< icUInt32Number, icSigUInt32ArrayType >::Interpolate ( icFloatNumber DstVector,
icFloatNumber  pos,
icUInt32Number  nVectorSize,
icFloatNumber zeroVals 
) const
virtual

Implements CIccTagNumArray.

6167{
6168 return false;
6169}

◆ Interpolate() [2/3]

bool CIccTagNum< icUInt64Number, icSigUInt64ArrayType >::Interpolate ( icFloatNumber DstVector,
icFloatNumber  pos,
icUInt32Number  nVectorSize,
icFloatNumber zeroVals 
) const
virtual

Implements CIccTagNumArray.

6173{
6174 return false;
6175}

◆ Interpolate() [3/3]

template<class T , icTagTypeSignature Tsig>
bool CIccTagNum< T, Tsig >::Interpolate ( icFloatNumber DstVector,
icFloatNumber  pos,
icUInt32Number  nVectorSize = 1,
icFloatNumber zeroVals = NULL 
) const
virtual

Name: CIccTagNum::Interpolate

Purpose: Gets values from the num array tag as floating point numbers

Args: nSize - number of data entries, bZeroNew - flag to zero newly formed values

Implements CIccTagNumArray.

6009{
6010 icUInt32Number nVector = m_nSize / nVectorSize;
6011
6012 if (!nVector)
6013 return false;
6014
6015 if (zeroVals)
6016 nVector ++;
6017 else if (nVector<=1)
6018 return false;
6019
6020 if (pos<0.0)
6021 pos=0.0;
6022 if (pos>1.0)
6023 pos=1.0;
6024
6025 icFloatNumber fpos = (icFloatNumber)(nVector-1) * pos;
6026 icUInt32Number iPos = (icUInt32Number)fpos;
6027 icFloatNumber x = fpos - iPos;
6028
6029 if (iPos == nVector-1) {
6030 iPos--;
6031 x = (icFloatNumber)1.0;
6032 }
6033
6034 T *lo, *hi;
6035
6036 if (!zeroVals) {
6037 if (!iPos) {
6038 lo = NULL;
6039 hi = m_Num;
6040 }
6041 else {
6042 lo = &m_Num[(iPos-1)*nVectorSize];
6043 hi = &lo[nVectorSize];
6044 }
6045 }
6046 else {
6047 lo = &m_Num[iPos*nVectorSize];
6048 hi = &lo[nVectorSize];
6049 }
6050
6052
6053 switch (Tsig) {
6055 if (!lo) {
6056 if (zeroVals) {
6057 for (i = 0; i < m_nSize; i++) {
6058 DstVector[i] = zeroVals[i] * (1.0f - x) + icU8toF((icUInt8Number)hi[i]) * x;
6059 }
6060 }
6061 else {
6062 for (i = 0; i < m_nSize; i++) {
6063 DstVector[i] = icU8toF((icUInt8Number)hi[i]) * x;
6064 }
6065 }
6066 }
6067 else {
6068 for (i=0; i<m_nSize; i++) {
6069 DstVector[i] = icU8toF((icUInt8Number)lo[i])*(1.0f-x) + icU8toF((icUInt8Number)hi[i])*x;
6070 }
6071 }
6072 break;
6074 if (!lo) {
6075 if (zeroVals) {
6076 for (i = 0; i < m_nSize; i++) {
6077 DstVector[i] = zeroVals[i] * (1.0f - x) + icU16toF((icUInt16Number)hi[i]) * x;
6078 }
6079 }
6080 else {
6081 for (i = 0; i < m_nSize; i++) {
6082 DstVector[i] = icU16toF((icUInt16Number)hi[i]) * x;
6083 }
6084 }
6085 }
6086 else {
6087 for (i=0; i<m_nSize; i++) {
6088 DstVector[i] = icU16toF((icUInt16Number)lo[i])*(1.0f-x) + icU16toF((icUInt16Number)hi[i])*x;
6089 }
6090 }
6091 break;
6094 default:
6095 return false;
6096 }
6097 return true;
6098}
float icFloatNumber
Definition IccDefs.h:101

References icSigUInt16ArrayType, icSigUInt32ArrayType, icSigUInt64ArrayType, icSigUInt8ArrayType, icU16toF(), icU8toF(), CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

+ Here is the call graph for this function:

◆ IsArrayType()

template<class T , icTagTypeSignature Tsig>
virtual bool CIccTagNum< T, Tsig >::IsArrayType ( )
inlinevirtual

Reimplemented from CIccTag.

974{ return m_nSize > 1; }

References CIccTagNum< T, Tsig >::m_nSize.

◆ IsMatrixArray()

template<class T , icTagTypeSignature Tsig>
virtual bool CIccTagNum< T, Tsig >::IsMatrixArray ( ) const
inlinevirtual

Implements CIccTagNumArray.

999{ return false; }

◆ IsMBBType()

virtual bool CIccTag::IsMBBType ( )
inlinevirtualinherited

Reimplemented in CIccMBB.

136{ return false; } //If true then CIccTag can be cast as an CIccMBB

Referenced by CIccProfileXml::ParseTag().

+ Here is the caller graph for this function:

◆ IsNumArrayType()

template<class T , icTagTypeSignature Tsig>
virtual bool CIccTagNum< T, Tsig >::IsNumArrayType ( ) const
inlinevirtual

Reimplemented from CIccTag.

990{ return true; }

◆ IsSupported()

virtual bool CIccTag::IsSupported ( )
inlinevirtualinherited

Function: IsSupported(size, pIO) - Check if tag fully supported for apply purposes. By Default inherited classes are supported. Unknown tag types are not supported.

Returns true if tag type is supported.

Reimplemented in CIccTagUnknown, CIccTagEmbeddedProfile, and CIccTagMultiProcessElement.

153{ return true; }

◆ NewCopy()

template<class T , icTagTypeSignature Tsig>
virtual CIccTag * CIccTagNum< T, Tsig >::NewCopy ( ) const
inlinevirtual

Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.

Parameter(s): none

Returns a new CIccTag object that is a copy of this object.

Reimplemented from CIccTag.

971{ return new CIccTagNum<T, Tsig>(*this); }
Definition IccTagBasic.h:966

◆ operator=()

template<class T , icTagTypeSignature Tsig>
CIccTagNum< T, Tsig > & CIccTagNum< T, Tsig >::operator= ( const CIccTagNum< T, Tsig > &  ITNum)

Name: CIccTagNum::operator=

Purpose: Copy Operator

Args: ITNum = The CIccTagNum object to be copied

5640{
5641 if (&ITNum == this)
5642 return *this;
5643
5644 m_nSize = ITNum.m_nSize;
5645
5646 m_Num = (T*)calloc(m_nSize, sizeof(T));
5647 memcpy(m_Num, ITNum.m_Num, m_nSize * sizeof(T));
5648
5649 return *this;
5650}

References CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

◆ operator[]()

template<class T , icTagTypeSignature Tsig>
T & CIccTagNum< T, Tsig >::operator[] ( icUInt32Number  index)
inline
984{return m_Num[index];}

References CIccTagNum< T, Tsig >::m_Num.

◆ Read() [1/2]

template<class T , icTagTypeSignature Tsig>
bool CIccTagNum< T, Tsig >::Read ( icUInt32Number  size,
CIccIO pIO 
)
virtual

Name: CIccTagNum::Read

Purpose: Read in the tag contents into a data block

Args: size - # of bytes in tag, pIO - IO object to read tag from

Return: true = successful, false = failure

Reimplemented from CIccTag.

5709{
5711
5712 if (sizeof(icTagTypeSignature) +
5713 sizeof(icUInt32Number) +
5714 sizeof(T) > size)
5715 return false;
5716
5717 if (!pIO) {
5718 return false;
5719 }
5720
5721 if (!pIO->Read32(&sig))
5722 return false;
5723
5724 if (!pIO->Read32(&m_nReserved))
5725 return false;
5726
5727 icUInt32Number nSize=((size-2*sizeof(icUInt32Number)) / sizeof(T));
5728
5729 if (!SetSize(nSize))
5730 return false;
5731
5732 if (sizeof(T)==sizeof(icUInt8Number)) {
5733 if (pIO->Read8(m_Num, nSize) != (icInt32Number)nSize )
5734 return false;
5735 }
5736 else if (sizeof(T)==sizeof(icUInt16Number)) {
5737 if (pIO->Read16(m_Num, nSize) != (icInt32Number)nSize )
5738 return false;
5739 }
5740 else if (sizeof(T)==sizeof(icUInt32Number)) {
5741 if (pIO->Read32(m_Num, nSize) != (icInt32Number)nSize )
5742 return false;
5743 }
5744 else if (sizeof(T)==sizeof(icUInt64Number)) {
5745 if (pIO->Read64(m_Num, nSize) != (icInt32Number)nSize )
5746 return false;
5747 }
5748 else
5749 return false;
5750
5751 return true;
5752}
long icInt32Number
Definition icProfileHeader.h:291
icTagTypeSignature
Definition icProfileHeader.h:526
virtual icInt32Number Read8(void *pBuf8, icInt32Number nNum=1)
Definition IccIO.h:104
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
icInt32Number Read64(void *pBuf64, icInt32Number nNum=1)
Definition IccIO.cpp:173
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
icUInt32Number m_nReserved
Definition IccTagBasic.h:235
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Definition IccTagBasic.cpp:5925

References CIccTag::m_nReserved, CIccTagNum< T, Tsig >::m_Num, CIccIO::Read16(), CIccIO::Read32(), CIccIO::Read64(), CIccIO::Read8(), and CIccTagNum< T, Tsig >::SetSize().

+ Here is the call graph for this function:

◆ Read() [2/2]

virtual bool CIccTag::Read ( icUInt32Number  size,
CIccIO pIO,
CIccProfile pProfile 
)
inlinevirtualinherited

Function: Read(size, pIO) - Read tag from file. Each derived tag will implement it's own Read() function.

Parameter(s): size - number of bytes in tag including the type signature. pIO - IO object used to read in tag. The IO object should already be initialized to point to the begining of the tag.

Returns true if Read is successful.

Reimplemented in CIccTagEmbeddedProfile.

197{ return Read(size, pIO); }
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Definition IccTagBasic.h:167

References CIccTag::Read().

+ Here is the call graph for this function:

◆ ReadAll()

virtual bool CIccTag::ReadAll ( )
inlinevirtualinherited

Function: ReadAll() - Read All sub data for tag from file. Called by CIccProfile::ReadAll() to read all sub data for tag

Returns true if ReadAll is successful.

Reimplemented in CIccTagEmbeddedProfile.

175{ return true; }

◆ SetSize()

template<class T , icTagTypeSignature Tsig>
bool CIccTagNum< T, Tsig >::SetSize ( icUInt32Number  nSize,
bool  bZeroNew = true 
)

Name: CIccTagNum::SetSize

Purpose: Sets the size of the data array.

Args: nSize - number of data entries, bZeroNew - flag to zero newly formed values

5926{
5927 if (nSize==m_nSize)
5928 return true;
5929
5930 m_Num = (T*)icRealloc(m_Num, nSize*sizeof(T));
5931
5932 if (!m_Num) {
5933 m_nSize = 0;
5934 return false;
5935 }
5936
5937 if (bZeroNew && m_nSize < nSize) {
5938 memset(&m_Num[m_nSize], 0, (nSize-m_nSize)*sizeof(T));
5939 }
5940 m_nSize = nSize;
5941
5942 return true;
5943}
ICCPROFLIB_API void * icRealloc(void *ptr, size_t size)
Definition IccUtil.cpp:111

References CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

Referenced by CIccTagNum< T, Tsig >::Read().

+ Here is the caller graph for this function:

◆ Validate()

template<class T , icTagTypeSignature Tsig>
icValidateStatus CIccTagNum< T, Tsig >::Validate ( std::string  sigPath,
std::string &  sReport,
const CIccProfile pProfile = NULL 
) const
virtual

Function: Validate Each derived tag will implement it's own IsValid() function

Parameter(s): sig - signature of tag being validated, sDescription - A string to put tag validation report.

Name: CIccTag::Validate

Purpose: Check tag data validity. In base class we only look at the tag's reserved data value

Args: sig = signature of tag being validated, sReport = String to add report information to

Return: icValidateStatusOK if valid, or other error status.

Reimplemented from CIccTag.

5869{
5871 //Check # of channels
5873 pProfile &&
5874 m_nSize != icGetMaterialColorSpaceSamples(pProfile->m_Header.mcs)) {
5875 CIccInfo Info;
5876 std::string sSigPathName = Info.GetSigPathName(sigPath);
5877
5878 sReport += icMsgValidateCriticalError;
5879 sReport += sSigPathName;
5880 sReport += " - Number of material default values does not match MCS in header.\n";
5882 }
5883
5884 rv = icMaxStatus(rv, CIccTagNumArray::Validate(sigPath, sReport, pProfile));
5885
5886 return rv;
5887}
@ icSigMaterialDefaultValuesTag
Definition icProfileHeader.h:426
icValidateStatus
Definition IccDefs.h:119
@ icValidateOK
Definition IccDefs.h:120
@ icValidateCriticalError
Definition IccDefs.h:123
ICCPROFLIB_API icSignature icGetFirstSigPathSig(std::string sigPath)
Definition IccUtil.cpp:1201
ICCPROFLIB_API const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
ICCPROFLIB_API icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Definition IccUtil.cpp:244
ICCPROFLIB_API icUInt32Number icGetMaterialColorSpaceSamples(icMaterialColorSignature sig)
Definition IccUtil.cpp:1391
Definition IccUtil.h:303
std::string GetSigPathName(std::string sigPath)
Definition IccUtil.cpp:1614
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Definition IccTagBasic.cpp:164

References CIccInfo::GetSigPathName(), icGetFirstSigPathSig(), icGetMaterialColorSpaceSamples(), icMaxStatus(), icMsgValidateCriticalError, icSigMaterialDefaultValuesTag, icValidateCriticalError, icValidateOK, CIccTagNum< T, Tsig >::m_nSize, icHeader::mcs, and CIccTag::Validate().

+ Here is the call graph for this function:

◆ ValuePos() [1/3]

bool CIccTagNum< icUInt32Number, icSigUInt32ArrayType >::ValuePos ( icFloatNumber DstPos,
icFloatNumber  val,
bool &  bNoZero 
) const
virtual

Implements CIccTagNumArray.

6179{
6180 return false;
6181}

◆ ValuePos() [2/3]

bool CIccTagNum< icUInt64Number, icSigUInt64ArrayType >::ValuePos ( icFloatNumber DstPos,
icFloatNumber  val,
bool &  bNoZero 
) const
virtual

Implements CIccTagNumArray.

6184{
6185 return false;
6186}

◆ ValuePos() [3/3]

template<class T , icTagTypeSignature Tsig>
bool CIccTagNum< T, Tsig >::ValuePos ( icFloatNumber DstPos,
icFloatNumber  val,
bool &  bNoZero 
) const
virtual

Name: CIccTagNum::ValuePos

Purpose: Gets position of a value int the num array tag

Args: DstPos - position of val in array val - value to look for in array. bNoZero - flag indicating whether first entry is zero

Implements CIccTagNumArray.

6115{
6116 if(val<0.0)
6117 return false;
6118
6119 icFloatNumber nv = 0.0;
6120 icFloatNumber lv = 0.0;
6121 switch (Tsig) {
6123 lv = icU8toF((icUInt8Number)m_Num[0]);
6124 break;
6126 lv = icU16toF((icUInt16Number)m_Num[0]);
6127 break;
6130 default:
6131 return false;
6132 }
6133 bNoZero = (lv!=0.0);
6134
6135 if (val<lv) {
6136 DstPos = val/lv - 1.0f;
6137 return true;
6138 }
6139
6141 for (i=1; i<m_nSize; i++, lv=nv) {
6142 switch (Tsig) {
6144 nv = icU8toF((icUInt8Number)m_Num[i]);
6145 break;
6147 nv = icU16toF((icUInt16Number)m_Num[i]);
6148 break;
6151 default:
6152 return false;
6153 }
6154 if (val<=nv) {
6155 DstPos = (val-lv)/(nv-lv) + i - 1.0f;
6156 return true;
6157 }
6158 }
6159
6160 return false;
6161}

References icSigUInt16ArrayType, icSigUInt32ArrayType, icSigUInt64ArrayType, icSigUInt8ArrayType, icU16toF(), icU8toF(), CIccTagNum< T, Tsig >::m_nSize, and CIccTagNum< T, Tsig >::m_Num.

+ Here is the call graph for this function:

◆ Write()

template<class T , icTagTypeSignature Tsig>
bool CIccTagNum< T, Tsig >::Write ( CIccIO pIO)
virtual

Name: CIccTagNum::Write

Purpose: Write the tag to a file

Args: pIO - The IO object to write tag to.

Return: true = succesful, false = failure

Reimplemented from CIccTag.

5770{
5772
5773 if (!pIO)
5774 return false;
5775
5776 if (!pIO->Write32(&sig))
5777 return false;
5778
5779 if (!pIO->Write32(&m_nReserved))
5780 return false;
5781
5782 if (sizeof(T)==sizeof(icUInt8Number)) {
5783 if (pIO->Write8(m_Num, m_nSize) != (icInt32Number)m_nSize)
5784 return false;
5785 }
5786 else if (sizeof(T)==sizeof(icUInt16Number)) {
5787 if (pIO->Write16(m_Num, m_nSize) != (icInt32Number)m_nSize)
5788 return false;
5789 }
5790 else if (sizeof(T)==sizeof(icUInt32Number)) {
5791 if (pIO->Write32(m_Num, m_nSize) != (icInt32Number)m_nSize)
5792 return false;
5793 }
5794 else if (sizeof(T)==sizeof(icUInt64Number)) {
5795 if (pIO->Write64(m_Num, m_nSize) != (icInt32Number)m_nSize)
5796 return false;
5797 }
5798 else
5799 return false;
5800
5801 return true;
5802}
virtual icInt32Number Write8(void *pBuf8, icInt32Number nNum=1)
Definition IccIO.h:105
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:122
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152
icInt32Number Write64(void *pBuf64, icInt32Number nNum=1)
Definition IccIO.cpp:182
virtual icTagTypeSignature GetType() const
Definition IccTagBasic.h:976

References CIccTagNum< T, Tsig >::GetType(), CIccTag::m_nReserved, CIccTagNum< T, Tsig >::m_nSize, CIccTagNum< T, Tsig >::m_Num, CIccIO::Write16(), CIccIO::Write32(), CIccIO::Write64(), and CIccIO::Write8().

+ Here is the call graph for this function:

Field Documentation

◆ m_nReserved

icUInt32Number CIccTag::m_nReserved
inherited

Referenced by CIccTag::CIccTag(), CIccTagMultiProcessElement::CIccTagMultiProcessElement(), CIccTagMultiProcessElement::CIccTagMultiProcessElement(), CIccTagMultiProcessElement::operator=(), CIccProfileXml::ParseTag(), CIccTagXmlStruct::ParseTag(), CIccMpeXmlTintArray::ParseXml(), CIccTagXmlArray::ParseXml(), CIccTagText::Read(), CIccTagUtf8Text::Read(), CIccTagZipUtf8Text::Read(), CIccTagUtf16Text::Read(), CIccTagTextDescription::Read(), CIccTagSignature::Read(), CIccTagNamedColor2::Read(), CIccTagXYZ::Read(), CIccTagChromaticity::Read(), CIccTagCicp::Read(), CIccTagSparseMatrixArray::Read(), CIccTagFixedNum< T, Tsig >::Read(), CIccTagNum< T, Tsig >::Read(), CIccTagFloatNum< T, Tsig >::Read(), CIccTagMeasurement::Read(), CIccTagMultiLocalizedUnicode::Read(), CIccTagData::Read(), CIccTagDateTime::Read(), CIccTagColorantOrder::Read(), CIccTagColorantTable::Read(), CIccTagViewingConditions::Read(), CIccTagProfileSeqDesc::Read(), CIccTagResponseCurveSet16::Read(), CIccTagSpectralDataInfo::Read(), CIccTagSpectralViewingConditions::Read(), CIccTagEmbeddedHeightImage::Read(), CIccTagEmbeddedNormalImage::Read(), CIccTagStruct::Read(), CIccTagArray::Read(), CIccTagDict::Read(), CIccTagCurve::Read(), CIccTagParametricCurve::Read(), CIccTagLutAtoB::Read(), CIccTagLut8::Read(), CIccTagLut16::Read(), CIccTagGamutBoundaryDesc::Read(), CIccTagMultiProcessElement::Read(), CIccTagProfileSequenceId::Read(), CIccTagEmbeddedProfile::Read(), CIccTag::Validate(), CIccTagText::Write(), CIccTagUtf8Text::Write(), CIccTagZipUtf8Text::Write(), CIccTagUtf16Text::Write(), CIccTagTextDescription::Write(), CIccTagSignature::Write(), CIccTagNamedColor2::Write(), CIccTagXYZ::Write(), CIccTagChromaticity::Write(), CIccTagCicp::Write(), CIccTagSparseMatrixArray::Write(), CIccTagFixedNum< T, Tsig >::Write(), CIccTagNum< T, Tsig >::Write(), CIccTagFloatNum< T, Tsig >::Write(), CIccTagMeasurement::Write(), CIccTagMultiLocalizedUnicode::Write(), CIccTagData::Write(), CIccTagDateTime::Write(), CIccTagColorantOrder::Write(), CIccTagColorantTable::Write(), CIccTagViewingConditions::Write(), CIccTagProfileSeqDesc::Write(), CIccTagResponseCurveSet16::Write(), CIccTagSpectralDataInfo::Write(), CIccTagSpectralViewingConditions::Write(), CIccTagEmbeddedHeightImage::Write(), CIccTagEmbeddedNormalImage::Write(), CIccTagStruct::Write(), CIccTagArray::Write(), CIccTagDict::Write(), CIccTagEmbeddedProfile::Write(), CIccTagCurve::Write(), CIccTagParametricCurve::Write(), CIccTagLutAtoB::Write(), CIccTagLut8::Write(), CIccTagLut16::Write(), CIccTagGamutBoundaryDesc::Write(), CIccTagMultiProcessElement::Write(), and CIccTagProfileSequenceId::Write().

◆ m_nSize

◆ m_Num


The documentation for this class was generated from the following files: