Hoyt's FORK of DemoIccMAX 2.1.17.hoyt
Documentation for Hoyt's FORK of DemoIccMAX
Loading...
Searching...
No Matches
CIccTagNum< T, Tsig > Class Template Reference

Class: CIccTagNum. More...

#include <IccTagBasic.h>

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

Public Member Functions

 CIccTagNum (const CIccTagNum< T, Tsig > &ITNum)
 Name: CIccTagNum::CIccTagNum.
 
 CIccTagNum (int nSize=1)
 Name: CIccTagNum::CIccTagNum.
 
void Describe (std::string &sDescription, int nVerboseness)
 Function: Describe(sDescription) Each derived tag will implement it's own Describe() function.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccTagNum::Describe.
 
virtual const icCharGetClassName () const
 Name: CIccTagNum::GetClassName.
 
virtual icUInt32Number GetNumValues () const
 
icUInt32Number GetSize () const
 Returns the size of the data array.
 
virtual icTagTypeSignature GetType () const
 Function: GetType()
 
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
 Name: CIccTagNum::GetValues.
 
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
 Name: CIccTagNum::Interpolate.
 
virtual bool IsArrayType ()
 
virtual bool IsMatrixArray () const
 
virtual bool IsNumArrayType () const
 
virtual CIccTagNewCopy () const
 Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.
 
CIccTagNumoperator= (const CIccTagNum< T, Tsig > &NumTag)
 Name: CIccTagNum::operator=.
 
T & operator[] (icUInt32Number index)
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccTagNum::Read.
 
bool SetSize (icUInt32Number nSize, bool bZeroNew=true)
 Name: CIccTagNum::SetSize.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 Function: Validate Each derived tag will implement it's own IsValid() function.
 
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
 Name: CIccTagNum::ValuePos.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccTagNum::Write.
 
virtual ~CIccTagNum ()
 Name: CIccTagNum::~CIccTagNum.
 
- Public Member Functions inherited from CIccTag
 CIccTag ()
 Name: CIccTag::CIccTag.
 
virtual void DetachIO ()
 Function: ReadAll() - Read All sub data for tag from file.
 
virtual IIccExtensionTagGetExtension ()
 
virtual icArraySignature GetTagArrayType () const
 
virtual icStructSignature GetTagStructType () const
 
virtual bool IsMBBType ()
 
virtual bool IsSupported ()
 Function: IsSupported(size, pIO) - Check if tag fully supported for apply purposes.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO, CIccProfile *pProfile)
 Function: Read(size, pIO) - Read tag from file.
 
virtual bool ReadAll ()
 Function: ReadAll() - Read All sub data for tag from file.
 
virtual ~CIccTag ()
 Name: CIccTag::CIccTag.
 

Protected Attributes

icUInt32Number m_nSize
 
T * m_Num
 

Additional Inherited Members

- Static Public Member Functions inherited from CIccTag
static CIccTagCreate (icTagTypeSignature sig)
 Name: CIccTag::Create.
 
- Public Attributes inherited from CIccTag
icUInt32Number m_nReserved
 

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

Definition at line 965 of file IccTagBasic.h.

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

Definition at line 5569 of file IccTagBasic.cpp.

5570{
5571 m_nSize = nSize;
5572 if (m_nSize <1)
5573 m_nSize = 1;
5574 m_Num = (T*)calloc(nSize, sizeof(T));
5575}
icUInt32Number m_nSize

◆ 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

Definition at line 5589 of file IccTagBasic.cpp.

5590{
5591 m_nSize = ITNum.m_nSize;
5592
5593 m_Num = (T*)calloc(m_nSize, sizeof(T));
5594 memcpy(m_Num, ITNum.m_Num, m_nSize * sizeof(T));
5595}

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

Definition at line 5633 of file IccTagBasic.cpp.

5634{
5635 if (m_Num)
5636 free(m_Num);
5637}

Member Function Documentation

◆ 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.

Definition at line 5861 of file IccTagBasic.cpp.

5862{
5863 icChar buf[128];
5864
5865 if (m_nSize == 1 ) {
5866 sprintf(buf, "Value = %llu (0x016%llx)\n", m_Num[0], m_Num[0]);
5867 sDescription += buf;
5868 }
5869 else {
5871 sDescription.reserve(sDescription.size() + m_nSize*79);
5872
5873 for (i=0; i<m_nSize; i++) {
5874 sprintf(buf, "Value = %llu (0x016%llx)\n", m_Num[i], m_Num[i]);
5875 sDescription += buf;
5876 }
5877 }
5878}
char icChar
Definition IccDefs.h:109
unsigned int icUInt32Number

◆ 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.

Definition at line 5786 of file IccTagBasic.cpp.

5787{
5788 icChar buf[128] = {0};
5789
5790 if (m_nSize == 1 ) {
5791 switch (sizeof(T)) {
5792 case 1:
5793 sprintf(buf, "Value = %u (0x02%x)\n", m_Num[0], m_Num[0]);
5794 break;
5795 case 2:
5796 sprintf(buf, "Value = %u (0x04%x)\n", m_Num[0], m_Num[0]);
5797 break;
5798 case 4:
5799 sprintf(buf, "Value = %u (0x08%x)\n", m_Num[0], m_Num[0]);
5800 break;
5801 case 8:
5802 sprintf(buf, "Value = %u (0x016%x)\n", m_Num[0], m_Num[0]);
5803 break;
5804 default:
5805 sprintf(buf, "Value = %u (0x%x)\n", m_Num[0], m_Num[0]);
5806 break;
5807 }
5808 sDescription += buf;
5809 }
5810 else {
5812 sDescription.reserve(sDescription.size() + m_nSize*79);
5813
5814 for (i=0; i<m_nSize; i++) {
5815 switch (sizeof(T)) {
5816 case 1:
5817 sprintf(buf, "Value = %u (0x02%x)\n", m_Num[i], m_Num[i]);
5818 break;
5819 case 2:
5820 sprintf(buf, "Value = %u (0x04%x)\n", m_Num[i], m_Num[i]);
5821 break;
5822 case 4:
5823 sprintf(buf, "Value = %u (0x08%x)\n", m_Num[i], m_Num[i]);
5824 break;
5825 case 8:
5826 sprintf(buf, "Value = %u (0x016%x)\n", m_Num[i], m_Num[i]);
5827 break;
5828 default:
5829 sprintf(buf, "Value = %u (0x%x)\n", m_Num[i], m_Num[i]);
5830 break;
5831 }
5832 sDescription += buf;
5833 }
5834 }
5835}

◆ 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 >.

Definition at line 5648 of file IccTagBasic.cpp.

5649{
5650 if (sizeof(T)==sizeof(icUInt8Number))
5651 return "CIccTagUInt8";
5652 else if (sizeof(T)==sizeof(icUInt16Number))
5653 return "CIccTagUInt16";
5654 else if (sizeof(T)==sizeof(icUInt32Number))
5655 return "CIccTagUInt32";
5656 else if (sizeof(T)==sizeof(icUInt64Number))
5657 return "CIccTagUInt64";
5658 else
5659 return "CIccTagNum<>";
5660}
unsigned char icUInt8Number
Number definitions.
unsigned short icUInt16Number
icUInt32Number icUInt64Number[2]

◆ GetNumValues()

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

Implements CIccTagNumArray.

Definition at line 993 of file IccTagBasic.h.

993{ return GetSize(); }
icUInt32Number GetSize() const
Returns the size of the data array.

◆ GetSize()

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

Returns the size of the data array.

Definition at line 987 of file IccTagBasic.h.

987{ return m_nSize; }

◆ 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.

Definition at line 976 of file IccTagBasic.h.

976{ return Tsig; }

◆ GetValues() [1/3]

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

Implements CIccTagNumArray.

Definition at line 5955 of file IccTagBasic.cpp.

5956{
5957 return false;
5958}

◆ GetValues() [2/3]

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

Implements CIccTagNumArray.

Definition at line 5960 of file IccTagBasic.cpp.

5961{
5962 return false;
5963}

◆ 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.

Definition at line 5927 of file IccTagBasic.cpp.

5928{
5929 if (nVectorSize+nStart >m_nSize)
5930 return false;
5931
5933
5934 switch (Tsig) {
5936 for (i=0; i<m_nSize; i++) {
5937 DstVector[i] = icU8toF((icUInt8Number)(m_Num[i+nStart]));
5938 }
5939 break;
5941 for (i=0; i<m_nSize; i++) {
5942 DstVector[i] = icU16toF((icUInt16Number)(m_Num[i+nStart]));
5943 }
5944 break;
5945 case icSigUInt32ArrayType: //Not Supported
5946 case icSigUInt64ArrayType: //Not Supported
5947 default:
5948 return false;
5949 }
5950 return true;
5951}
icFloatNumber icU16toF(icUInt16Number num)
Definition IccUtil.cpp:759
icFloatNumber icU8toF(icUInt8Number num)
Definition IccUtil.cpp:738
@ icSigUInt16ArrayType
@ icSigUInt8ArrayType
@ icSigUInt64ArrayType
@ icSigUInt32ArrayType

References icSigUInt16ArrayType, icSigUInt32ArrayType, icSigUInt64ArrayType, icSigUInt8ArrayType, icU16toF(), and icU8toF().

+ 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.

Definition at line 6121 of file IccTagBasic.cpp.

6123{
6124 return false;
6125}

◆ Interpolate() [2/3]

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

Implements CIccTagNumArray.

Definition at line 6127 of file IccTagBasic.cpp.

6129{
6130 return false;
6131}

◆ 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.

Definition at line 5977 of file IccTagBasic.cpp.

5979{
5980 icUInt32Number nVector = m_nSize / nVectorSize;
5981
5982 if (!nVector)
5983 return false;
5984
5985 if (zeroVals)
5986 nVector ++;
5987 else if (nVector<=1)
5988 return false;
5989
5990 if (pos<0.0)
5991 pos=0.0;
5992 if (pos>1.0)
5993 pos=1.0;
5994
5995 icFloatNumber fpos = (icFloatNumber)(nVector-1) * pos;
5996 icUInt32Number iPos = (icUInt32Number)fpos;
5997 icFloatNumber x = fpos - iPos;
5998
5999 if (iPos == nVector-1) {
6000 iPos--;
6001 x = (icFloatNumber)1.0;
6002 }
6003
6004 T *lo, *hi;
6005
6006 if (!zeroVals) {
6007 if (!iPos) {
6008 lo = NULL;
6009 hi = m_Num;
6010 }
6011 else {
6012 lo = &m_Num[(iPos-1)*nVectorSize];
6013 hi = &lo[nVectorSize];
6014 }
6015 }
6016 else {
6017 lo = &m_Num[iPos*nVectorSize];
6018 hi = &lo[nVectorSize];
6019 }
6020
6022
6023 switch (Tsig) {
6025 if (!lo) {
6026 for (i=0; i<m_nSize; i++) {
6027 DstVector[i] = zeroVals[i]*(1.0f-x) + icU8toF((icUInt8Number)hi[i])*x;
6028 }
6029 }
6030 else {
6031 for (i=0; i<m_nSize; i++) {
6032 DstVector[i] = icU8toF((icUInt8Number)lo[i])*(1.0f-x) + icU8toF((icUInt8Number)hi[i])*x;
6033 }
6034 }
6035 break;
6037 if (!lo) {
6038 for (i=0; i<m_nSize; i++) {
6039 DstVector[i] = zeroVals[i]*(1.0f-x) + icU16toF((icUInt16Number)hi[i])*x;
6040 }
6041 }
6042 else {
6043 for (i=0; i<m_nSize; i++) {
6044 DstVector[i] = icU16toF((icUInt16Number)lo[i])*(1.0f-x) + icU16toF((icUInt16Number)hi[i])*x;
6045 }
6046 }
6047 break;
6050 default:
6051 return false;
6052 }
6053 return true;
6054}
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100

References icSigUInt16ArrayType, icSigUInt32ArrayType, icSigUInt64ArrayType, icSigUInt8ArrayType, icU16toF(), and icU8toF().

+ Here is the call graph for this function:

◆ IsArrayType()

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

Reimplemented from CIccTag.

Definition at line 974 of file IccTagBasic.h.

974{ return m_nSize > 1; }

◆ IsMatrixArray()

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

Implements CIccTagNumArray.

Definition at line 999 of file IccTagBasic.h.

999{ return false; }

◆ IsNumArrayType()

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

Reimplemented from CIccTag.

Definition at line 990 of file IccTagBasic.h.

990{ 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.

Definition at line 971 of file IccTagBasic.h.

971{ return new CIccTagNum<T, Tsig>(*this); }
CIccTagNum(int nSize=1)
Name: CIccTagNum::CIccTagNum.

◆ 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

Definition at line 5609 of file IccTagBasic.cpp.

5610{
5611 if (&ITNum == this)
5612 return *this;
5613
5614 m_nSize = ITNum.m_nSize;
5615
5616 m_Num = (T*)calloc(m_nSize, sizeof(T));
5617 memcpy(m_Num, ITNum.m_Num, m_nSize * sizeof(T));
5618
5619 return *this;
5620}

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

Definition at line 984 of file IccTagBasic.h.

984{return m_Num[index];}

◆ Read()

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.

Definition at line 5678 of file IccTagBasic.cpp.

5679{
5681
5682 if (sizeof(icTagTypeSignature) +
5683 sizeof(icUInt32Number) +
5684 sizeof(T) > size)
5685 return false;
5686
5687 if (!pIO) {
5688 return false;
5689 }
5690
5691 if (!pIO->Read32(&sig))
5692 return false;
5693
5694 if (!pIO->Read32(&m_nReserved))
5695 return false;
5696
5697 icUInt32Number nSize=((size-2*sizeof(icUInt32Number)) / sizeof(T));
5698
5699 if (!SetSize(nSize))
5700 return false;
5701
5702 if (sizeof(T)==sizeof(icUInt8Number)) {
5703 if (pIO->Read8(m_Num, nSize) != (icInt32Number)nSize )
5704 return false;
5705 }
5706 else if (sizeof(T)==sizeof(icUInt16Number)) {
5707 if (pIO->Read16(m_Num, nSize) != (icInt32Number)nSize )
5708 return false;
5709 }
5710 else if (sizeof(T)==sizeof(icUInt32Number)) {
5711 if (pIO->Read32(m_Num, nSize) != (icInt32Number)nSize )
5712 return false;
5713 }
5714 else if (sizeof(T)==sizeof(icUInt64Number)) {
5715 if (pIO->Read64(m_Num, nSize) != (icInt32Number)nSize )
5716 return false;
5717 }
5718 else
5719 return false;
5720
5721 return true;
5722}
icArraySignature sig
icTagTypeSignature
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
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagNum::SetSize.
long icInt32Number

References CIccIO::Read16(), CIccIO::Read32(), CIccIO::Read64(), CIccIO::Read8(), and sig.

+ Here is the call graph for this function:

◆ 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

Definition at line 5895 of file IccTagBasic.cpp.

5896{
5897 if (nSize==m_nSize)
5898 return true;
5899
5900 m_Num = (T*)icRealloc(m_Num, nSize*sizeof(T));
5901
5902 if (!m_Num) {
5903 m_nSize = 0;
5904 return false;
5905 }
5906
5907 if (bZeroNew && m_nSize < nSize) {
5908 memset(&m_Num[m_nSize], 0, (nSize-m_nSize)*sizeof(T));
5909 }
5910 m_nSize = nSize;
5911
5912 return true;
5913}
void * icRealloc(void *ptr, size_t size)
Name: icRealloc.
Definition IccUtil.cpp:111

References icRealloc().

+ Here is the call 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.

Name: CIccTag::Validate.

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

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.

Definition at line 5838 of file IccTagBasic.cpp.

5839{
5841 //Check # of channels
5843 pProfile &&
5844 m_nSize != icGetMaterialColorSpaceSamples(pProfile->m_Header.mcs)) {
5845 CIccInfo Info;
5846 std::string sSigPathName = Info.GetSigPathName(sigPath);
5847
5848 sReport += icMsgValidateCriticalError;
5849 sReport += sSigPathName;
5850 sReport += " - Number of material default values does not match MCS in header.\n";
5852 }
5853
5854 rv = icMaxStatus(rv, CIccTagNumArray::Validate(sigPath, sReport, pProfile));
5855
5856 return rv;
5857}
icValidateStatus
Definition IccDefs.h:118
@ icValidateOK
Definition IccDefs.h:119
@ icValidateCriticalError
Definition IccDefs.h:122
icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Name: icMaxStatus.
Definition IccUtil.cpp:244
icUInt32Number icGetMaterialColorSpaceSamples(icMaterialColorSignature sig)
Definition IccUtil.cpp:1391
const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
icSignature icGetFirstSigPathSig(std::string sigPath)
Definition IccUtil.cpp:1201
Type: Class.
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
Function: Validate Each derived tag will implement it's own IsValid() function.
@ icSigMaterialDefaultValuesTag

References CIccInfo::GetSigPathName(), icGetFirstSigPathSig(), icGetMaterialColorSpaceSamples(), icMaxStatus(), icMsgValidateCriticalError, icSigMaterialDefaultValuesTag, icValidateCriticalError, icValidateOK, 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.

Definition at line 6134 of file IccTagBasic.cpp.

6135{
6136 return false;
6137}

◆ ValuePos() [2/3]

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

Implements CIccTagNumArray.

Definition at line 6139 of file IccTagBasic.cpp.

6140{
6141 return false;
6142}

◆ 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.

Definition at line 6070 of file IccTagBasic.cpp.

6071{
6072 if(val<0.0)
6073 return false;
6074
6075 icFloatNumber nv = 0.0;
6076 icFloatNumber lv = 0.0;
6077 switch (Tsig) {
6079 lv = icU8toF((icUInt8Number)m_Num[0]);
6080 break;
6082 lv = icU16toF((icUInt16Number)m_Num[0]);
6083 break;
6086 default:
6087 return false;
6088 }
6089 bNoZero = (lv!=0.0);
6090
6091 if (val<lv) {
6092 DstPos = val/lv - 1.0f;
6093 return true;
6094 }
6095
6097 for (i=1; i<m_nSize; i++, lv=nv) {
6098 switch (Tsig) {
6100 nv = icU8toF((icUInt8Number)m_Num[i]);
6101 break;
6103 nv = icU16toF((icUInt16Number)m_Num[i]);
6104 break;
6107 default:
6108 return false;
6109 }
6110 if (val<=nv) {
6111 DstPos = (val-lv)/(nv-lv) + i - 1.0f;
6112 return true;
6113 }
6114 }
6115
6116 return false;
6117}

References icSigUInt16ArrayType, icSigUInt32ArrayType, icSigUInt64ArrayType, icSigUInt8ArrayType, icU16toF(), and icU8toF().

+ 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.

Definition at line 5739 of file IccTagBasic.cpp.

5740{
5742
5743 if (!pIO)
5744 return false;
5745
5746 if (!pIO->Write32(&sig))
5747 return false;
5748
5749 if (!pIO->Write32(&m_nReserved))
5750 return false;
5751
5752 if (sizeof(T)==sizeof(icUInt8Number)) {
5753 if (pIO->Write8(m_Num, m_nSize) != (icInt32Number)m_nSize)
5754 return false;
5755 }
5756 else if (sizeof(T)==sizeof(icUInt16Number)) {
5757 if (pIO->Write16(m_Num, m_nSize) != (icInt32Number)m_nSize)
5758 return false;
5759 }
5760 else if (sizeof(T)==sizeof(icUInt32Number)) {
5761 if (pIO->Write32(m_Num, m_nSize) != (icInt32Number)m_nSize)
5762 return false;
5763 }
5764 else if (sizeof(T)==sizeof(icUInt64Number)) {
5765 if (pIO->Write64(m_Num, m_nSize) != (icInt32Number)m_nSize)
5766 return false;
5767 }
5768 else
5769 return false;
5770
5771 return true;
5772}
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
Function: GetType()

References sig, CIccIO::Write16(), CIccIO::Write32(), CIccIO::Write64(), and CIccIO::Write8().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_nSize

template<class T , icTagTypeSignature Tsig>
icUInt32Number CIccTagNum< T, Tsig >::m_nSize
protected

◆ m_Num

template<class T , icTagTypeSignature Tsig>
T* CIccTagNum< T, Tsig >::m_Num
protected

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