Hoyt's FORK of DemoIccMAX 2.1.17.hoyt
Documentation for Hoyt's FORK of DemoIccMAX
Loading...
Searching...
No Matches
CIccTagArray Class Reference

Class: CIccTagArray. More...

#include <IccTagComposite.h>

+ Inheritance diagram for CIccTagArray:
+ Collaboration diagram for CIccTagArray:

Public Member Functions

bool AreAllOfType (icTagTypeSignature sigTagType)
 Name: CIccTagArray::AreAllOftype.
 
bool AttachTag (icUInt32Number nIndex, CIccTag *pTag)
 Name: CIccTagArray::AttachTag.
 
 CIccTagArray ()
 Name: CIccTagArray::CIccTagArray.
 
 CIccTagArray (const CIccTagArray &lut)
 Name: CIccTagArray::CIccTagArray.
 
 CIccTagArray (icArraySignature sigArrayType)
 Name: CIccTagArray::CIccTagArray.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccTagArray::Describe.
 
CIccTagDetachTag (icUInt32Number nIndex, bool bDeleteFlag=false)
 Name: CIccTagArray::DetachTag.
 
IIccArrayGetArrayHandler ()
 Name: CIccTagArray::GetArrayHandler.
 
virtual const icCharGetClassName () const
 
CIccTagGetIndex (icUInt32Number index) const
 Name: CIccTagArray::GetIndex.
 
icUInt32Number GetSize () const
 Returns the size of the data array.
 
virtual icArraySignature GetTagArrayType () const
 
virtual icTagTypeSignature GetType () const
 Function: GetType()
 
virtual CIccTagNewCopy () const
 Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.
 
CIccTagArrayoperator= (const CIccTagArray &lut)
 Name: &operator=.
 
CIccTagoperator[] (icUInt32Number index) const
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccTagArray::Read.
 
bool SetSize (icUInt32Number nSize)
 Name: CIccTagArray::SetSize.
 
virtual bool SetTagArrayType (icArraySignature sig)
 Name: CIccTagArray::~SetTagArrayType.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 Name: CIccTagArray::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccTagArray::Write.
 
virtual ~CIccTagArray ()
 Name: CIccTagArray::~CIccTagArray.
 
- 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 icStructSignature GetTagStructType () const
 
virtual bool IsArrayType ()
 
virtual bool IsMBBType ()
 
virtual bool IsNumArrayType () const
 
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.
 

Static Public Member Functions

static CIccTagArrayParseMem (icUInt8Number *pMem, icUInt32Number size)
 
- Static Public Member Functions inherited from CIccTag
static CIccTagCreate (icTagTypeSignature sig)
 Name: CIccTag::Create.
 

Protected Member Functions

void Cleanup ()
 Name: CIccTagArray::Cleanup.
 

Protected Attributes

icUInt32Number m_nSize
 
IIccArraym_pArray
 
icArraySignature m_sigArrayType
 
IccTagPtr * m_TagVals
 

Additional Inherited Members

- Public Attributes inherited from CIccTag
icUInt32Number m_nReserved
 

Detailed Description

Class: CIccTagArray.

Purpose: The Tag Array tag

Definition at line 225 of file IccTagComposite.h.

Constructor & Destructor Documentation

◆ CIccTagArray() [1/3]

CIccTagArray::CIccTagArray ( )

Name: CIccTagArray::CIccTagArray.

Purpose:

Args:

Return:

Definition at line 993 of file IccTagComposite.cpp.

994{
995 m_TagVals = NULL;
996 m_nSize = 0;
997 m_pArray = NULL;
999}
icArraySignature m_sigArrayType
icUInt32Number m_nSize
IccTagPtr * m_TagVals
IIccArray * m_pArray
#define icSigUnknownArray
Convenience Enum Definitions - Not defined in ICC specification.

References icSigUnknownArray, m_nSize, m_pArray, m_sigArrayType, and m_TagVals.

◆ CIccTagArray() [2/3]

CIccTagArray::CIccTagArray ( icArraySignature sigArrayType)

Name: CIccTagArray::CIccTagArray.

Purpose:

Args:

Return:

Definition at line 1011 of file IccTagComposite.cpp.

1012{
1013 m_TagVals = NULL;
1014 m_nSize = 0;
1015
1016 m_pArray = NULL;
1017 SetTagArrayType(sigArrayType);
1018}
virtual bool SetTagArrayType(icArraySignature sig)
Name: CIccTagArray::~SetTagArrayType.

References m_nSize, m_pArray, m_TagVals, and SetTagArrayType().

+ Here is the call graph for this function:

◆ CIccTagArray() [3/3]

CIccTagArray::CIccTagArray ( const CIccTagArray & tagAry)

Name: CIccTagArray::CIccTagArray.

Purpose:

Args:

Return:

Definition at line 1030 of file IccTagComposite.cpp.

1031{
1032 if (tagAry.m_nSize) {
1033 m_TagVals = new IccTagPtr[tagAry.m_nSize];
1034
1036 for (i=0; i<tagAry.m_nSize; i++) {
1037 if (tagAry.m_TagVals[i].ptr)
1038 m_TagVals[i].ptr = tagAry.m_TagVals[i].ptr->NewCopy();
1039 else
1040 m_TagVals[i].ptr = NULL;
1041 }
1042 m_nSize = tagAry.m_nSize;
1043 }
1045
1046 if (tagAry.m_pArray)
1047 m_pArray = tagAry.m_pArray->NewCopy(this);
1048 else
1049 m_pArray = NULL;
1050}
unsigned int icUInt32Number
virtual IIccArray * NewCopy(CIccTagArray *pNewTagArray) const =0

References m_nSize, m_pArray, m_sigArrayType, m_TagVals, and IIccArray::NewCopy().

+ Here is the call graph for this function:

◆ ~CIccTagArray()

CIccTagArray::~CIccTagArray ( )
virtual

Name: CIccTagArray::~CIccTagArray.

Purpose:

Args:

Return:

Definition at line 1102 of file IccTagComposite.cpp.

1103{
1104 Cleanup();
1105}
void Cleanup()
Name: CIccTagArray::Cleanup.

References Cleanup().

+ Here is the call graph for this function:

Member Function Documentation

◆ AreAllOfType()

bool CIccTagArray::AreAllOfType ( icTagTypeSignature sigTagType)

Name: CIccTagArray::AreAllOftype.

Purpose: checks if all array elements have type signature sigTagType Args: sigTagType Return: true if all elements are of type sigTagType, false otherwise

Definition at line 1145 of file IccTagComposite.cpp.

1146{
1148 for (i=0; i<m_nSize; i++) {
1149 CIccTag *pTag = GetIndex(i);
1150 if (!pTag || pTag->GetType()!=sigTagType)
1151 return false;
1152 }
1153
1154 return true;
1155}
CIccTag * GetIndex(icUInt32Number index) const
Name: CIccTagArray::GetIndex.
Class: CIccTag.
virtual icTagTypeSignature GetType() const
Function: GetType()

References GetIndex(), CIccTag::GetType(), and m_nSize.

+ Here is the call graph for this function:

◆ AttachTag()

bool CIccTagArray::AttachTag ( icUInt32Number nIndex,
CIccTag * pTag )

Name: CIccTagArray::AttachTag.

Purpose: Get a tag entry with a given signature

Args: nIndex - index of tag in array

Return: Pointer to desired tag struct entry, or NULL if not found.

Definition at line 1563 of file IccTagComposite.cpp.

1564{
1565 if (nIndex>m_nSize || !pTag) {
1566 return false;
1567 }
1568
1569 if (m_TagVals[nIndex].ptr && m_TagVals[nIndex].ptr != pTag) {
1570 return false;
1571 }
1572
1573 m_TagVals[nIndex].ptr = pTag;
1574 return true;
1575}

References m_nSize, and m_TagVals.

◆ Cleanup()

void CIccTagArray::Cleanup ( )
protected

Name: CIccTagArray::Cleanup.

Purpose: Detach from a pending IO object

Definition at line 1502 of file IccTagComposite.cpp.

1503{
1504 icUInt32Number i, j;
1505 CIccTag* pTag;
1506
1507 for (i=0; i<m_nSize; i++) {
1508 pTag = m_TagVals[i].ptr;
1509 if (pTag) {
1510 for (j=i+1; j<m_nSize; j++) {
1511 if (m_TagVals[i].ptr==pTag)
1512 m_TagVals[i].ptr = NULL;
1513 }
1514 delete pTag;
1515 m_TagVals[i].ptr = NULL;
1516 }
1517 }
1518
1519 delete [] m_TagVals;
1520
1521 if (m_pArray)
1522 delete m_pArray;
1523
1524 m_pArray = NULL;
1526}
@ icSigUndefinedArray

References icSigUndefinedArray, m_nSize, m_pArray, m_sigArrayType, and m_TagVals.

Referenced by operator=(), Read(), and ~CIccTagArray().

+ Here is the caller graph for this function:

◆ Describe()

void CIccTagArray::Describe ( std::string & sDescription,
int nVerboseness )
virtual

Name: CIccTagArray::Describe.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 1168 of file IccTagComposite.cpp.

1169{
1170 std::string name;
1171 icChar buf[128];
1172 CIccInfo info;
1173
1174 IIccArray *pArrayObj = GetArrayHandler();
1176
1177 sDescription += "BEGIN TAG_ARRAY \"";
1178 sDescription += name;
1179 sDescription += "\"\n\n";
1180
1182
1183 for (i=0; i<m_nSize; i++) {
1184 if (i)
1185 sDescription += "\n";
1186 sprintf(buf, "BEGIN INDEX[%d]\n", i);
1187 sDescription += buf;
1188
1189 if (m_TagVals[i].ptr) {
1190 m_TagVals[i].ptr->Describe(sDescription, nVerboseness);
1191 }
1192 sprintf(buf, "END INDEX[%d]\n", i);
1193 sDescription += buf;
1194 }
1195
1196 sDescription += "\n";
1197 sDescription += "END TAG_ARRAY \"";
1198 sDescription += name;
1199 sDescription += "\"\n";
1200}
char icChar
Definition IccDefs.h:109
static bool GetArraySigName(std::string &arrayName, icArraySignature arrayTypeSig, bool bFillUnknown=true)
Function: GetArraySigName(structTypeSig) Get display name of structTypeSig.
Type: Class.
Definition IccUtil.h:303
IIccArray * GetArrayHandler()
Name: CIccTagArray::GetArrayHandler.
Class: IIccArray.

References GetArrayHandler(), CIccArrayCreator::GetArraySigName(), m_nSize, m_sigArrayType, and m_TagVals.

+ Here is the call graph for this function:

◆ DetachTag()

CIccTag * CIccTagArray::DetachTag ( icUInt32Number nIndex,
bool bDeleteFlag = false )

Name: CIccTagArray::DetachTag.

Purpose: Detach tag value at given index

Args: nIndex - index of tag in array bDeleteFlag - flag indicating detached tag should be deleted

Return: Pointer to Detached tag struct entry, or NULL if not found or deleted.

Definition at line 1592 of file IccTagComposite.cpp.

1593{
1594 if (nIndex>m_nSize)
1595 return NULL;
1596
1597 CIccTag *rv = m_TagVals[nIndex].ptr;
1598 m_TagVals[nIndex].ptr = NULL;
1599
1600 if (bDeleteFlag) {
1601 delete rv;
1602 rv = NULL;
1603 }
1604
1605 return rv;
1606}

References m_nSize, and m_TagVals.

◆ GetArrayHandler()

IIccArray * CIccTagArray::GetArrayHandler ( )

Name: CIccTagArray::GetArrayHandler.

Purpose: Get Array object handler

Args:

Return: Pointer to an Array object handler for the associated array type

Definition at line 1621 of file IccTagComposite.cpp.

1622{
1623 if (!m_pArray) {
1625 }
1626
1627 return m_pArray;
1628}
static IIccArray * CreateArray(icArraySignature arrayTypeSig, CIccTagArray *pTagArray=NULL)
Function: CreateArray(structTypeSig) Create a element of type structTypeSig.

References CIccArrayCreator::CreateArray(), m_pArray, and m_sigArrayType.

Referenced by Describe(), and icGetTagArrayHandler().

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

◆ GetClassName()

virtual const icChar * CIccTagArray::GetClassName ( ) const
inlinevirtual

Reimplemented from CIccTag.

Reimplemented in CIccTagXmlArray.

Definition at line 244 of file IccTagComposite.h.

244{ return "CIccTagArray"; }

◆ GetIndex()

CIccTag * CIccTagArray::GetIndex ( icUInt32Number nIndex) const

Name: CIccTagArray::GetIndex.

Purpose: Get a tag entry with a given index

Args: nIndex - index of tag in array

Return: Pointer to desired tag entry, or NULL if not found.

Definition at line 1541 of file IccTagComposite.cpp.

1542{
1543 if (nIndex>m_nSize)
1544 return NULL;
1545
1546 return m_TagVals[nIndex].ptr;
1547}

References m_nSize, and m_TagVals.

Referenced by AreAllOfType().

+ Here is the caller graph for this function:

◆ GetSize()

icUInt32Number CIccTagArray::GetSize ( ) const
inline

Returns the size of the data array.

Definition at line 260 of file IccTagComposite.h.

260{ return m_nSize; }

◆ GetTagArrayType()

virtual icArraySignature CIccTagArray::GetTagArrayType ( ) const
inlinevirtual

Reimplemented from CIccTag.

Definition at line 238 of file IccTagComposite.h.

238{ return m_sigArrayType; }

◆ GetType()

virtual icTagTypeSignature CIccTagArray::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 237 of file IccTagComposite.h.

237{ return icSigTagArrayType; }
@ icSigTagArrayType

References icSigTagArrayType.

Referenced by Write().

+ Here is the caller graph for this function:

◆ NewCopy()

virtual CIccTag * CIccTagArray::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 232 of file IccTagComposite.h.

232{ return new CIccTagArray(*this);}
CIccTagArray()
Name: CIccTagArray::CIccTagArray.

◆ operator=()

CIccTagArray & CIccTagArray::operator= ( const CIccTagArray & tagAry)

Name: &operator=.

Purpose:

Args:

Return:

Definition at line 1062 of file IccTagComposite.cpp.

1063{
1064 if (&tagAry == this)
1065 return *this;
1066
1067 Cleanup();
1068
1069 if (tagAry.m_nSize) {
1070 m_TagVals = new IccTagPtr[tagAry.m_nSize];
1071
1073 for (i=0; i<m_nSize; i++) {
1074 if (tagAry.m_TagVals[i].ptr)
1075 m_TagVals[i].ptr = tagAry.m_TagVals[i].ptr->NewCopy();
1076 else
1077 m_TagVals[i].ptr = NULL;
1078 }
1079 m_nSize = tagAry.m_nSize;
1080 }
1081
1083
1084 if (tagAry.m_pArray)
1085 m_pArray = tagAry.m_pArray->NewCopy(this);
1086 else
1087 m_pArray = NULL;
1088
1089 return *this;
1090}

References Cleanup(), m_nSize, m_pArray, m_sigArrayType, m_TagVals, and IIccArray::NewCopy().

+ Here is the call graph for this function:

◆ operator[]()

CIccTag * CIccTagArray::operator[] ( icUInt32Number index) const
inline

Definition at line 257 of file IccTagComposite.h.

257{ return GetIndex(index); }

◆ ParseMem()

static CIccTagArray * CIccTagArray::ParseMem ( icUInt8Number * pMem,
icUInt32Number size )
static

◆ Read()

bool CIccTagArray::Read ( icUInt32Number size,
CIccIO * pIO )
virtual

Name: CIccTagArray::Read.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 1213 of file IccTagComposite.cpp.

1214{
1216
1217 icUInt32Number headerSize = sizeof(icTagTypeSignature) +
1218 sizeof(icUInt32Number) +
1219 sizeof(icTagTypeSignature) +
1220 sizeof(icStructSignature) +
1221 sizeof(icUInt32Number);
1222
1223 if (headerSize > size)
1224 return false;
1225
1226 if (!pIO) {
1227 return false;
1228 }
1229
1230 Cleanup();
1231
1232 icUInt32Number nTagStart = pIO->Tell();
1233
1234 if (!pIO->Read32(&sig))
1235 return false;
1236
1237 icArraySignature sigArrayType;
1238
1239 if (!pIO->Read32(&m_nReserved) ||
1240 !pIO->Read32(&sigArrayType))
1241 return false;
1242
1243 SetTagArrayType(sigArrayType);
1244
1245 icUInt32Number count, i, j;
1246 IccTagEntry TagEntry;
1247
1248 TagEntry.pTag = NULL;
1249
1250 if (!pIO->Read32(&count))
1251 return false;
1252
1253 if (headerSize + count*sizeof(icPositionNumber) > size)
1254 return false;
1255
1256 if (count) {
1257 icPositionNumber *tagPos = new icPositionNumber[count];
1258
1259 if (!SetSize(count)) {
1260 delete[] tagPos;
1261 return false;
1262 }
1263
1264 for (i=0; i<count; i++) {
1265 if (!pIO->Read32(&tagPos[i].offset) ||
1266 !pIO->Read32(&tagPos[i].size)) {
1267 delete [] tagPos;
1268 return false;
1269 }
1270 }
1271
1272 for (i=0; i<count; i++) {
1273 if (!tagPos[i].offset || !tagPos[i].size) {
1274 m_TagVals[i].ptr = NULL;
1275 continue;
1276 }
1277
1278 for (j=0; j<i; j++) {
1279 if (tagPos[i].offset == tagPos[j].offset)
1280 break;
1281 }
1282
1283 if (j<i) {
1284 m_TagVals[i].ptr = m_TagVals[j].ptr;
1285 }
1286 else {
1287 if (tagPos[i].offset + tagPos[i].size > size) {
1288 delete [] tagPos;
1289 return false;
1290 }
1291 pIO->Seek(nTagStart + tagPos[i].offset, icSeekSet);
1292
1293 icTagTypeSignature tagSig;
1294 pIO->Read32(&tagSig);
1295 pIO->Seek(nTagStart + tagPos[i].offset, icSeekSet);
1296
1297 CIccTag *pTag = CIccTagCreator::CreateTag(tagSig);
1298 if (pTag) {
1299 if (!pTag->Read(tagPos[i].size, pIO)) {
1300 delete [] tagPos;
1301 return false;
1302 }
1303 m_TagVals[i].ptr = pTag;
1304 }
1305 else {
1306 delete [] tagPos;
1307 return false;
1308 }
1309 }
1310 }
1311
1312 delete [] tagPos;
1313 }
1314
1315 return true;
1316}
icArraySignature sig
@ icSeekSet
Definition IccIO.h:83
icTagTypeSignature
virtual icInt32Number Tell()
Definition IccIO.h:133
virtual icInt32Number Seek(icInt32Number nOffset, icSeekVal pos)
Definition IccIO.h:132
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
bool SetSize(icUInt32Number nSize)
Name: CIccTagArray::SetSize.
static CIccTag * CreateTag(icTagTypeSignature tagTypeSig)
Function: CreateTag(tagTypeSig) Create a tag of type tagTypeSig.
icUInt32Number m_nReserved
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Function: Read(size, pIO) - Read tag from file.
icStructSignature
Tag Structure type signatures.
icArraySignature
Tag Array type signatures.

References Cleanup(), CIccTagCreator::CreateTag(), icSeekSet, CIccTag::m_nReserved, m_TagVals, icPositionNumber::offset, CIccTag::Read(), CIccIO::Read32(), CIccIO::Seek(), SetSize(), SetTagArrayType(), sig, icPositionNumber::size, and CIccIO::Tell().

+ Here is the call graph for this function:

◆ SetSize()

bool CIccTagArray::SetSize ( icUInt32Number nSize)

Name: CIccTagArray::SetSize.

Purpose: Sets the size of the tag array.

Args: nSize - number of tag entries,

Definition at line 1419 of file IccTagComposite.cpp.

1420{
1421 if (!m_nSize) {
1422 m_TagVals = (IccTagPtr*)calloc(nSize, sizeof(IccTagPtr));
1423 if (!m_TagVals) {
1424 m_nSize =0;
1425 return false;
1426 }
1427 }
1428 else {
1429 if (nSize<=m_nSize)
1430 return true;
1431
1432 m_TagVals = (IccTagPtr*)icRealloc(m_TagVals, nSize*sizeof(IccTagPtr));
1433 if (!m_TagVals) {
1434 m_nSize = 0;
1435 return false;
1436 }
1437 memset(&m_TagVals[m_nSize], 0, (nSize-m_nSize)*sizeof(IccTagPtr));
1438 }
1439 m_nSize = nSize;
1440 return true;
1441}
void * icRealloc(void *ptr, size_t size)
Name: icRealloc.
Definition IccUtil.cpp:111

References icRealloc(), m_nSize, and m_TagVals.

Referenced by Read().

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

◆ SetTagArrayType()

bool CIccTagArray::SetTagArrayType ( icArraySignature sig)
virtual

Name: CIccTagArray::~SetTagArrayType.

Purpose: Set the signature of the tag array type. This also sets the m_pArray to allow array type specific handling to be utilized.

Args: sig - signature of array type

Return: true if sig is a recognized array type, false otherwise

Definition at line 1122 of file IccTagComposite.cpp.

1123{
1124 if (m_pArray)
1125 delete m_pArray;
1126
1129
1130 return (m_pArray != NULL) || (m_sigArrayType == icSigUtf8TextTypeArray);
1131}
@ icSigUtf8TextTypeArray

References CIccArrayCreator::CreateArray(), icSigUtf8TextTypeArray, m_pArray, m_sigArrayType, and sig.

Referenced by CIccTagArray(), and Read().

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

◆ Validate()

icValidateStatus CIccTagArray::Validate ( std::string sigPath,
std::string & sReport,
const CIccProfile * pProfile = NULL ) const
virtual

Name: CIccTagArray::Validate.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 1454 of file IccTagComposite.cpp.

1456{
1457 icValidateStatus rv = CIccTag::Validate(sigPath, sReport, pProfile);
1458
1459 CIccInfo Info;
1460 std::string sigAryPath = sigPath + icGetSigPath(m_sigArrayType);
1461
1462 if (m_pArray) { //Should call GetArrayHandler before validate to get
1463 rv = icMaxStatus(rv, m_pArray->Validate(sigPath, sReport, pProfile));
1464 }
1465 else if (m_sigArrayType==icSigUtf8TextTypeArray) { //UTF8 text arrays are known
1466 //Check # of channels
1468 pProfile &&
1469 m_nSize != icGetMaterialColorSpaceSamples(pProfile->m_Header.mcs)) {
1470 std::string sSigPathName = Info.GetSigPathName(sigPath);
1471
1472 sReport += icMsgValidateCriticalError;
1473 sReport += sSigPathName;
1474 sReport += " - Number of material channel names does not match MCS in header.\n";
1476 }
1478 for (i=0; i<m_nSize; i++) {
1479 rv = icMaxStatus(rv, m_TagVals[i].ptr->Validate(sigAryPath, sReport, pProfile));
1480 }
1481 }
1482 else {
1484 sReport += "Unknown tag array type - Validating array sub-tags\n";
1486
1487 for (i=0; i<m_nSize; i++) {
1488 rv = icMaxStatus(rv, m_TagVals[i].ptr->Validate(sigAryPath, sReport, pProfile));
1489 }
1490 }
1491
1492 return rv;
1493}
icValidateStatus
Definition IccDefs.h:118
@ icValidateWarning
Definition IccDefs.h:120
@ icValidateCriticalError
Definition IccDefs.h:122
icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Name: icMaxStatus.
Definition IccUtil.cpp:244
std::string icGetSigPath(icUInt32Number nSig)
Definition IccUtil.cpp:1191
icUInt32Number icGetMaterialColorSpaceSamples(icMaterialColorSignature sig)
Definition IccUtil.cpp:1391
const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
icSignature icGetFirstSigPathSig(std::string sigPath)
Definition IccUtil.cpp:1201
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.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const =0
@ icSigMaterialTypeArrayTag

References CIccInfo::GetSigPathName(), icGetFirstSigPathSig(), icGetMaterialColorSpaceSamples(), icGetSigPath(), icMaxStatus(), icMsgValidateCriticalError, icSigMaterialTypeArrayTag, icSigUtf8TextTypeArray, icValidateCriticalError, icValidateWarning, m_nSize, m_pArray, m_sigArrayType, m_TagVals, CIccTag::Validate(), and IIccArray::Validate().

+ Here is the call graph for this function:

◆ Write()

bool CIccTagArray::Write ( CIccIO * pIO)
virtual

Name: CIccTagArray::Write.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 1328 of file IccTagComposite.cpp.

1329{
1331
1332 if (!pIO)
1333 return false;
1334
1335 icUInt32Number nTagStart = pIO->Tell();
1336
1337 if (!pIO->Write32(&sig))
1338 return false;
1339
1340 if (!pIO->Write32(&m_nReserved))
1341 return false;
1342
1343 if (!pIO->Write32(&m_sigArrayType))
1344 return false;
1345
1346 if (!pIO->Write32(&m_nSize))
1347 return false;
1348
1349 if (m_nSize) {
1350 icUInt32Number i, j;
1351
1352 icUInt32Number pos = pIO->Tell();
1353
1354 //Write Unintialized TagPosition block
1355 icUInt32Number zero = 0;
1356 for (i=0; i<m_nSize; i++) {
1357 if (!pIO->Write32(&zero) || !pIO->Write32(&zero))
1358 return false;
1359 }
1361 if (!tagPos)
1362 return false;
1363
1364 //Write Tags
1365 for (i=0; i<m_nSize; i++) {
1366 if (m_TagVals[i].ptr) {
1367 for (j=0; j<i; j++) {
1368 if (m_TagVals[i].ptr==m_TagVals[j].ptr)
1369 break;
1370 }
1371
1372 if (j<i) {
1373 tagPos[i].offset = tagPos[j].offset;
1374 tagPos[i].size = tagPos[j].offset;
1375 }
1376 else {
1377 tagPos[i].offset = pIO->Tell() - nTagStart;
1378 if (!m_TagVals[i].ptr->Write(pIO)) {
1379 delete [] tagPos;
1380 return false;
1381 }
1382 tagPos[i].size = pIO->Tell() - nTagStart - tagPos[i].offset;
1383 pIO->Align32();
1384 }
1385 }
1386 else {
1387 tagPos[i].offset = 0;
1388 tagPos[i].size = 0;
1389 }
1390 }
1391 icUInt32Number endPos = pIO->Tell();
1392
1393 //Update TagPosition block
1394 pIO->Seek(pos, icSeekSet);
1395 for (i=0; i<m_nSize; i++) {
1396 if (!pIO->Write32(&tagPos[i].offset) ||
1397 !pIO->Write32(&tagPos[i].size)) {
1398 delete [] tagPos;
1399 return false;
1400 }
1401 }
1402 pIO->Seek(endPos, icSeekSet);
1403 }
1404
1405 return true;
1406}
bool Align32()
Write operation to make sure that filelength is evenly divisible by 4.
Definition IccIO.cpp:341
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152
virtual icTagTypeSignature GetType() const
Function: GetType()
icUInt32Number offset
icUInt32Number size

References CIccIO::Align32(), GetType(), icSeekSet, CIccTag::m_nReserved, m_nSize, m_sigArrayType, m_TagVals, icPositionNumber::offset, CIccIO::Seek(), sig, icPositionNumber::size, CIccIO::Tell(), and CIccIO::Write32().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_nSize

◆ m_pArray

IIccArray* CIccTagArray::m_pArray
protected

◆ m_sigArrayType

icArraySignature CIccTagArray::m_sigArrayType
protected

◆ m_TagVals

IccTagPtr* CIccTagArray::m_TagVals
protected

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