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

Class: CIccTagDict. More...

#include <IccTagDict.h>

+ Inheritance diagram for CIccTagDict:
+ Collaboration diagram for CIccTagDict:

Public Member Functions

bool AreNamesNonzero () const
 Name: CIccTagDict::AreNamesNonzero.
 
bool AreNamesUnique () const
 Name: CIccTagDict::AreNamesUnique.
 
 CIccTagDict ()
 Name: CIccTagDict::CIccTagDict.
 
 CIccTagDict (const CIccTagDict &dict)
 Name: CIccTagDict::CIccTagDict.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccTagDict::Describe.
 
CIccDictEntryGet (const char *szName) const
 Name: CIccTagDict::Get.
 
CIccDictEntryGet (const icUInt16Number *szName) const
 Name: CIccTagDict::Get.
 
CIccDictEntryGet (std::wstring sName) const
 Name: CIccTagDict::Get.
 
virtual const icCharGetClassName () const
 
CIccTagMultiLocalizedUnicodeGetNameLocalized (const char *szName) const
 Name: CIccTagDict::GetNameLocalized.
 
CIccTagMultiLocalizedUnicodeGetNameLocalized (const icUnicodeChar *szName) const
 Name: CIccTagDict::GetNameLocalized.
 
CIccTagMultiLocalizedUnicodeGetNameLocalized (std::wstring sName) const
 Name: CIccTagDict::GetNameLocalized.
 
virtual icTagTypeSignature GetType () const
 Function: GetType()
 
std::wstring GetValue (const char *szName, bool *bIsSet=NULL) const
 Name: CIccTagDict::GetValue.
 
std::wstring GetValue (const icUnicodeChar *szName, bool *bIsSet=NULL) const
 Name: CIccTagDict::GetValue.
 
std::wstring GetValue (std::wstring sName, bool *bIsSet=NULL) const
 Name: CIccTagDict::GetValue.
 
CIccTagMultiLocalizedUnicodeGetValueLocalized (const char *szName) const
 Name: CIccTagDict::GetValueLocalized.
 
CIccTagMultiLocalizedUnicodeGetValueLocalized (const icUnicodeChar *szName) const
 Name: CIccTagDict::GetValueLocalized.
 
CIccTagMultiLocalizedUnicodeGetValueLocalized (std::wstring sName) const
 Name: CIccTagDict::GetValueLocalized.
 
virtual CIccTagNewCopy () const
 Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.
 
CIccTagDictoperator= (const CIccTagDict &dict)
 Name: &operator=.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccTagDict::Read.
 
bool Remove (const char *szName)
 Name: CIccTagDict::Remove.
 
bool Remove (const icUnicodeChar *szName)
 Name: CIccTagDict::Remove.
 
bool Remove (std::wstring sName)
 Name: CIccTagDict::Remove.
 
bool Set (const char *szName, const char *szValue=NULL)
 
bool Set (const icUnicodeChar *szName, const icUnicodeChar *szValue=NULL)
 
bool Set (std::wstring sName, std::wstring sValue, bool bUnSet=false)
 Name: CIccTagDict::Set.
 
bool SetNameLocalized (const char *szName, CIccTagMultiLocalizedUnicode *pTag)
 
bool SetNameLocalized (const icUnicodeChar *szName, CIccTagMultiLocalizedUnicode *pTag)
 
bool SetNameLocalized (std::wstring sName, CIccTagMultiLocalizedUnicode *pTag)
 
bool SetValueLocalized (const char *szName, CIccTagMultiLocalizedUnicode *pTag)
 
bool SetValueLocalized (const icUnicodeChar *szName, CIccTagMultiLocalizedUnicode *pTag)
 
bool SetValueLocalized (std::wstring sName, CIccTagMultiLocalizedUnicode *pTag)
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 Name: CIccTagDict::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccTagDict::Write.
 
virtual ~CIccTagDict ()
 Name: CIccTagDict::~CIccTagDict.
 
- 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 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.
 

Public Attributes

CIccNameValueDictm_Dict
 
- Public Attributes inherited from CIccTag
icUInt32Number m_nReserved
 

Protected Member Functions

void Cleanup ()
 Name: CIccTagDict::Cleanup.
 
icUInt32Number MaxPosRecSize ()
 Name: CIccTagDict::MaxPosRecSize;.
 

Protected Attributes

bool m_bBadAlignment
 
icUInt32Number m_tagSize
 
icUInt32Number m_tagStart
 

Additional Inherited Members

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

Detailed Description

Class: CIccTagDict.

Purpose: A name-value dictionary tag with optional localization

Definition at line 160 of file IccTagDict.h.

Constructor & Destructor Documentation

◆ CIccTagDict() [1/2]

CIccTagDict::CIccTagDict ( )

Name: CIccTagDict::CIccTagDict.

Purpose:

Args:

Return:

Definition at line 337 of file IccTagDict.cpp.

338{
339 m_tagSize = m_tagStart = 0;
340 m_bBadAlignment = false;
341
343}
std::list< CIccDictEntryPtr > CIccNameValueDict
List Class: CIccDictEntry.
Definition IccTagDict.h:151
bool m_bBadAlignment
Definition IccTagDict.h:217
CIccNameValueDict * m_Dict
Definition IccTagDict.h:214
icUInt32Number m_tagStart
Definition IccTagDict.h:222
icUInt32Number m_tagSize
Definition IccTagDict.h:221

References m_bBadAlignment, m_Dict, m_tagSize, and m_tagStart.

◆ CIccTagDict() [2/2]

CIccTagDict::CIccTagDict ( const CIccTagDict & dict)

Name: CIccTagDict::CIccTagDict.

Purpose:

Args:

Return:

Definition at line 355 of file IccTagDict.cpp.

356{
357 m_tagSize = m_tagStart = 0;
358 m_bBadAlignment = false;
360
361 CIccNameValueDict::iterator i;
362 CIccDictEntryPtr ptr = {};
363
364 for (i=dict.m_Dict->begin(); i!=dict.m_Dict->end(); i++) {
365 ptr.ptr = new CIccDictEntry(*i->ptr);
366
367 m_Dict->push_back(ptr);
368 }
369}
Data Class: CIccDictEntry.
Definition IccTagDict.h:97
Definition IccTagDict.h:139
CIccDictEntry * ptr
Definition IccTagDict.h:141

References m_bBadAlignment, m_Dict, m_tagSize, m_tagStart, and CIccDictEntryPtr::ptr.

◆ ~CIccTagDict()

CIccTagDict::~CIccTagDict ( )
virtual

Name: CIccTagDict::~CIccTagDict.

Purpose:

Args:

Return:

Definition at line 410 of file IccTagDict.cpp.

411{
412 Cleanup();
413 delete m_Dict;
414}
void Cleanup()
Name: CIccTagDict::Cleanup.

References Cleanup(), and m_Dict.

+ Here is the call graph for this function:

Member Function Documentation

◆ AreNamesNonzero()

bool CIccTagDict::AreNamesNonzero ( ) const

Name: CIccTagDict::AreNamesNonzero.

Purpose: For each tag it checks to see if any other tags have the same signature.

Return: true if all tags have unique signatures, or false if there are duplicate tag signatures.

Definition at line 1007 of file IccTagDict.cpp.

1008{
1009 CIccNameValueDict::const_iterator i, j;
1010
1011 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
1012 if (i->ptr->GetName().empty())
1013 return false;
1014 }
1015
1016return true;
1017}

References m_Dict.

Referenced by Validate().

+ Here is the caller graph for this function:

◆ AreNamesUnique()

bool CIccTagDict::AreNamesUnique ( ) const

Name: CIccTagDict::AreNamesUnique.

Purpose: For each tag it checks to see if any other tags have the same signature.

Return: true if all tags have unique signatures, or false if there are duplicate tag signatures.

Definition at line 979 of file IccTagDict.cpp.

980{
981 CIccNameValueDict::const_iterator i, j;
982
983 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
984 j=i;
985 for (j++; j!= m_Dict->end(); j++) {
986 if (i->ptr->GetName() == j->ptr->GetName())
987 return false;
988 }
989 }
990
991 return true;
992}

References m_Dict.

Referenced by Validate().

+ Here is the caller graph for this function:

◆ Cleanup()

void CIccTagDict::Cleanup ( )
protected

Name: CIccTagDict::Cleanup.

Purpose: Detach from a pending IO object

Definition at line 955 of file IccTagDict.cpp.

956{
957 CIccNameValueDict::iterator i;
958
959 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
960 if (i->ptr)
961 delete i->ptr;
962 }
963 m_Dict->clear();
964}

References m_Dict.

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

+ Here is the caller graph for this function:

◆ Describe()

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

Name: CIccTagDict::Describe.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 454 of file IccTagDict.cpp.

455{
456 icChar buf[128];
457
458 sprintf(buf, "BEGIN DICT_TAG\n");
459 sDescription += buf;
460
461 CIccNameValueDict::iterator i;
462 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
463 sDescription += "\n";
464
465 i->ptr->Describe(sDescription, nVerboseness);
466 }
467
468 sprintf(buf, "\nEND DICT_TAG\n");
469 sDescription += buf;
470}
char icChar
Definition IccDefs.h:109

References m_Dict.

◆ Get() [1/3]

CIccDictEntry * CIccTagDict::Get ( const char * szName) const

Name: CIccTagDict::Get.

Purpose: Get a dictionary entry with a given name

Args: sName - name to find in dictionary

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

Definition at line 1081 of file IccTagDict.cpp.

1082{
1083 std::wstring sName(szName, szName+strlen(szName));
1084
1085 return Get(sName);
1086}
const icChar * szName
CIccDictEntry * Get(const char *szName) const
Name: CIccTagDict::Get.

References Get(), and szName.

Referenced by Get(), Get(), GetNameLocalized(), GetValue(), GetValueLocalized(), Set(), SetNameLocalized(), and SetValueLocalized().

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

◆ Get() [2/3]

CIccDictEntry * CIccTagDict::Get ( const icUInt16Number * szName) const

Name: CIccTagDict::Get.

Purpose: Get a dictionary entry with a given name

Args: sName - name to find in dictionary

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

Definition at line 1058 of file IccTagDict.cpp.

1059{
1060 std::wstring sName;
1061 while(*szName)
1062 sName += *szName;
1063
1064 return Get(sName);
1065}

References Get(), and szName.

+ Here is the call graph for this function:

◆ Get() [3/3]

CIccDictEntry * CIccTagDict::Get ( std::wstring sName) const

Name: CIccTagDict::Get.

Purpose: Get a dictionary entry with a given name

Args: sName - name to find in dictionary

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

Definition at line 1033 of file IccTagDict.cpp.

1034{
1035 CIccNameValueDict::const_iterator i;
1036
1037 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
1038 if (i->ptr->GetName() == sName)
1039 return i->ptr;
1040 }
1041
1042 return NULL;
1043}

References m_Dict.

◆ GetClassName()

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

Reimplemented from CIccTag.

Reimplemented in CIccTagXmlDict.

Definition at line 170 of file IccTagDict.h.

170{ return "CIccTagDict"; }

◆ GetNameLocalized() [1/3]

CIccTagMultiLocalizedUnicode * CIccTagDict::GetNameLocalized ( const char * szName) const

Name: CIccTagDict::GetNameLocalized.

Purpose: Get a localized name information associated with a given name

Args: sName - name to find in dictionary

Return: localized information for name

Definition at line 1221 of file IccTagDict.cpp.

1222{
1223 std::wstring sName(szName, szName+strlen(szName));
1224
1225 return GetNameLocalized(sName);
1226}
CIccTagMultiLocalizedUnicode * GetNameLocalized(std::wstring sName) const
Name: CIccTagDict::GetNameLocalized.

References GetNameLocalized(), and szName.

+ Here is the call graph for this function:

◆ GetNameLocalized() [2/3]

CIccTagMultiLocalizedUnicode * CIccTagDict::GetNameLocalized ( const icUnicodeChar * szName) const

Name: CIccTagDict::GetNameLocalized.

Purpose: Get a localized name information associated with a given name

Args: sName - name to find in dictionary

Return: localized information for name

Definition at line 1198 of file IccTagDict.cpp.

1199{
1200 std::wstring sName;
1201 while(*szName)
1202 sName += *szName;
1203
1204 return GetNameLocalized(sName);
1205}

References GetNameLocalized(), and szName.

+ Here is the call graph for this function:

◆ GetNameLocalized() [3/3]

CIccTagMultiLocalizedUnicode * CIccTagDict::GetNameLocalized ( std::wstring sName) const

Name: CIccTagDict::GetNameLocalized.

Purpose: Get a localized name information associated with a given name

Args: sName - name to find in dictionary

Return: localized information for name

Definition at line 1175 of file IccTagDict.cpp.

1176{
1177 CIccDictEntry *de = Get(sName);
1178
1179 if (de)
1180 return de->GetNameLocalized();
1181
1182 return NULL;
1183}
CIccTagMultiLocalizedUnicode * GetNameLocalized()
Definition IccTagDict.h:118

References Get(), and CIccDictEntry::GetNameLocalized().

Referenced by GetNameLocalized(), and GetNameLocalized().

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

◆ GetType()

virtual icTagTypeSignature CIccTagDict::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 169 of file IccTagDict.h.

169{ return icSigDictType; }
@ icSigDictType

References icSigDictType.

Referenced by Write().

+ Here is the caller graph for this function:

◆ GetValue() [1/3]

std::wstring CIccTagDict::GetValue ( const char * szName,
bool * bIsSet = NULL ) const

Name: CIccTagDict::GetValue.

Purpose: Get a value associated with a given name

Args: szName - name to find in dictionary

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

Definition at line 1155 of file IccTagDict.cpp.

1156{
1157 std::wstring sName(szName, szName+strlen(szName));
1158
1159 return GetValue(sName, bIsSet);
1160}
std::wstring GetValue(const char *szName, bool *bIsSet=NULL) const
Name: CIccTagDict::GetValue.

References GetValue(), and szName.

Referenced by GetValue(), and GetValue().

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

◆ GetValue() [2/3]

std::wstring CIccTagDict::GetValue ( const icUnicodeChar * szName,
bool * bIsSet = NULL ) const

Name: CIccTagDict::GetValue.

Purpose: Get a value associated with a given name

Args: szName - name to find in dictionary

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

Definition at line 1133 of file IccTagDict.cpp.

1134{
1135 std::wstring sName;
1136 while(*szName)
1137 sName += *szName;
1138
1139 return GetValue(sName, bIsSet);
1140}

References GetValue(), and szName.

+ Here is the call graph for this function:

◆ GetValue() [3/3]

std::wstring CIccTagDict::GetValue ( std::wstring sName,
bool * bIsSet = NULL ) const

Name: CIccTagDict::GetValue.

Purpose: Get a value associated with a given name

Args: sName - name to find in dictionary

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

Definition at line 1101 of file IccTagDict.cpp.

1102{
1103 CIccDictEntry *de = Get(sName);
1104
1105 if (de) {
1106
1107 if (bIsSet)
1108 *bIsSet = de->IsValueSet();
1109
1110 return de->GetValue();
1111 }
1112
1113 if (bIsSet)
1114 *bIsSet = false;
1115
1116 std::wstring str;
1117 return str;
1118}
bool IsValueSet()
Definition IccTagDict.h:115
std::wstring GetValue()
Definition IccTagDict.h:114

References Get(), CIccDictEntry::GetValue(), and CIccDictEntry::IsValueSet().

+ Here is the call graph for this function:

◆ GetValueLocalized() [1/3]

CIccTagMultiLocalizedUnicode * CIccTagDict::GetValueLocalized ( const char * szName) const

Name: CIccTagDict::GetValueLocalized.

Purpose: Get a localized name information for value associated with a given name

Args: sName - name to find in dictionary

Return: localized information for name's value

Definition at line 1288 of file IccTagDict.cpp.

1289{
1290 std::wstring sName(szName, szName+strlen(szName));
1291
1292 return GetValueLocalized(sName);
1293}
CIccTagMultiLocalizedUnicode * GetValueLocalized(std::wstring sName) const
Name: CIccTagDict::GetValueLocalized.

References GetValueLocalized(), and szName.

+ Here is the call graph for this function:

◆ GetValueLocalized() [2/3]

CIccTagMultiLocalizedUnicode * CIccTagDict::GetValueLocalized ( const icUnicodeChar * szName) const

Name: CIccTagDict::GetValueLocalized.

Purpose: Get a localized name information for value associated with a given name

Args: sName - name to find in dictionary

Return: localized information for name's value

Definition at line 1265 of file IccTagDict.cpp.

1266{
1267 std::wstring sName;
1268 while(*szName)
1269 sName += *szName;
1270
1271 return GetValueLocalized(sName);
1272}

References GetValueLocalized(), and szName.

+ Here is the call graph for this function:

◆ GetValueLocalized() [3/3]

CIccTagMultiLocalizedUnicode * CIccTagDict::GetValueLocalized ( std::wstring sName) const

Name: CIccTagDict::GetValueLocalized.

Purpose: Get a localized name information for value associated with a given name

Args: sName - name to find in dictionary

Return: localized information for name's value

Definition at line 1242 of file IccTagDict.cpp.

1243{
1244 CIccDictEntry *de = Get(sName);
1245
1246 if (de)
1247 return de->GetValueLocalized();
1248
1249 return NULL;
1250}
CIccTagMultiLocalizedUnicode * GetValueLocalized()
Definition IccTagDict.h:119

References Get(), and CIccDictEntry::GetValueLocalized().

Referenced by GetValueLocalized(), and GetValueLocalized().

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

◆ MaxPosRecSize()

icUInt32Number CIccTagDict::MaxPosRecSize ( )
protected

Name: CIccTagDict::MaxPosRecSize;.

Purpose:

Args:

Return:

Definition at line 427 of file IccTagDict.cpp.

428{
429
430 icUInt32Number rv = 16;
431
432 CIccNameValueDict::iterator i;
433 CIccDictEntry ptr;
434
435 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
436 if (i->ptr->PosRecSize() > rv)
437 rv = i->ptr->PosRecSize();
438 }
439
440 return rv;
441}
unsigned int icUInt32Number
icUInt32Number PosRecSize()
Name: CIccDictEntry::PosRecSize.

References m_Dict, and CIccDictEntry::PosRecSize().

Referenced by Write().

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

◆ NewCopy()

virtual CIccTag * CIccTagDict::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 166 of file IccTagDict.h.

166{ return new CIccTagDict(*this);}
CIccTagDict()
Name: CIccTagDict::CIccTagDict.

◆ operator=()

CIccTagDict & CIccTagDict::operator= ( const CIccTagDict & dict)

Name: &operator=.

Purpose:

Args:

Return:

Definition at line 381 of file IccTagDict.cpp.

382{
383 if (&dict == this)
384 return *this;
385
386 Cleanup();
387
388 CIccNameValueDict::iterator i;
389 CIccDictEntryPtr ptr = {};
390
391 for (i=dict.m_Dict->begin(); i!=dict.m_Dict->end(); i++) {
392 ptr.ptr = new CIccDictEntry(*i->ptr);
393
394 m_Dict->push_back(ptr);
395 }
396
397 return *this;
398}

References Cleanup(), m_Dict, and CIccDictEntryPtr::ptr.

+ Here is the call graph for this function:

◆ Read()

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

Name: CIccTagDict::Read.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 491 of file IccTagDict.cpp.

492{
494
495 m_tagSize = size;
496
497 icUInt32Number headerSize = sizeof(icTagTypeSignature) +
498 sizeof(icUInt32Number) +
499 sizeof(icUInt32Number) +
500 sizeof(icUInt32Number);
501
502 if (headerSize > size)
503 return false;
504
505 if (!pIO) {
506 return false;
507 }
508
509 Cleanup();
510
511 m_tagStart = pIO->Tell();
512
513 if (!pIO->Read32(&sig))
514 return false;
515
516 if (!pIO->Read32(&m_nReserved))
517 return false;
518
519 icUInt32Number count, reclen, i;
520
521 if (!pIO->Read32(&count))
522 return false;
523
524 if (!pIO->Read32(&reclen))
525 return false;
526
527 if (reclen!=16 && reclen!=24 && reclen!=32)
528 return false;
529
530 if (headerSize + count*reclen > size)
531 return false;
532
533 icDictRecordPos *pos = (icDictRecordPos*)calloc(count, sizeof(icDictRecordPos));
534 if (!pos)
535 return false;
536
537 //Read TagDir
538 for (i=0; i<count; i++) {
539 if (!pIO->Read32(&pos[i].posName.offset) ||
540 !pIO->Read32(&pos[i].posName.size) ||
541 !pIO->Read32(&pos[i].posValue.offset) ||
542 !pIO->Read32(&pos[i].posValue.size)) {
543 free(pos);
544 return false;
545 }
546
547 if (reclen>=24) {
548 if (!pIO->Read32(&pos[i].posNameLocalized.offset) ||
549 !pIO->Read32(&pos[i].posNameLocalized.size)) {
550 free(pos);
551 return false;
552 }
553 if (reclen>=32) {
554 if (!pIO->Read32(&pos[i].posValueLocalized.offset) ||
555 !pIO->Read32(&pos[i].posValueLocalized.size)) {
556 free(pos);
557 return false;
558 }
559 }
560 }
561
562 if ((pos[i].posName.offset & 0x3) ||
563 (pos[i].posValue.offset & 0x3) ||
564 (pos[i].posNameLocalized.offset & 0x3) ||
565 (pos[i].posValueLocalized.offset & 0x3))
566 m_bBadAlignment = true;
567 }
568
569 icUInt32Number bufsize = 128, num;
570 icUnicodeChar *buf = (icUnicodeChar*)malloc(bufsize);
571 CIccDictEntryPtr ptr = {};
572 std::wstring str;
573
574 for (i=0; i<count; i++) {
575 ptr.ptr = new CIccDictEntry();
576 if (!ptr.ptr)
577 return false;
578
579 //GetName
580 if (pos[i].posName.offset) {
581 if (!pos[i].posName.size) {
582 str.clear();
583 ptr.ptr->SetValue(str);
584 }
585 else {
586 if (pos[i].posName.offset + pos[i].posName.size >size ||
587 !pos[i].posName.size) {
588 free(pos);
589 free(buf);
590 delete ptr.ptr;
591 return false;
592 }
593
594 //Make sure we have buf large enough for the string
595 if (bufsize < pos[i].posName.size) {
596 bufsize = pos[i].posName.size;
597 buf = (icUnicodeChar*)icRealloc(buf, bufsize);
598 if (!buf) {
599 free(pos);
600 delete ptr.ptr;
601 return false;
602 }
603 }
604
605 if (pIO->Seek(m_tagStart+pos[i].posName.offset, icSeekSet)<0) {
606 free(pos);
607 free(buf);
608 delete ptr.ptr;
609 return false;
610 }
611
612 num = pos[i].posName.size / sizeof(icUnicodeChar);
613 if (pIO->Read16(buf, num)!=(icInt32Number)num) {
614 free(pos);
615 free(buf);
616 delete ptr.ptr;
617 return false;
618 }
619 str.assign(&buf[0], &buf[num]);
620 ptr.ptr->GetName() = str;
621 }
622 }
623
624 //GetValue
625 if (pos[i].posValue.offset) {
626 if (!pos[i].posValue.size) {
627 str.clear();
628 ptr.ptr->SetValue(str);
629 }
630 else {
631 if (pos[i].posValue.offset + pos[i].posValue.size >size ||
632 (pos[i].posValue.size&1)) {
633 free(pos);
634 free(buf);
635 delete ptr.ptr;
636 return false;
637 }
638
639 //Make sure we have buf large enough for the string
640 if (bufsize < pos[i].posValue.size) {
641 bufsize = pos[i].posValue.size;
642 buf = (icUnicodeChar*)icRealloc(buf, bufsize);
643 if (!buf) {
644 free(pos);
645 delete ptr.ptr;
646 return false;
647 }
648 }
649
650 if (pIO->Seek(m_tagStart+pos[i].posValue.offset, icSeekSet)<0) {
651 free(pos);
652 free(buf);
653 delete ptr.ptr;
654 return false;
655 }
656
657 num = pos[i].posValue.size / sizeof(icUnicodeChar);
658 if (pIO->Read16(buf, num)!=(icInt32Number)num) {
659 free(pos);
660 free(buf);
661 delete ptr.ptr;
662 return false;
663 }
664 str.assign(&buf[0], &buf[num]);
665 ptr.ptr->SetValue(str);
666 }
667 }
668
669 //Get NameLocalized
670 if (pos[i].posNameLocalized.offset) {
671 if (pos[i].posNameLocalized.offset + pos[i].posNameLocalized.size > size ||
672 pos[i].posNameLocalized.size < sizeof(icSignature)) {
673 free(pos);
674 free(buf);
675 delete ptr.ptr;
676 return false;
677 }
678
679 if (pIO->Seek(m_tagStart+pos[i].posNameLocalized.offset, icSeekSet)<0) {
680 free(pos);
681 free(buf);
682 delete ptr.ptr;
683 return false;
684 }
685
687 if (!pIO->Read32(&textSig, 1)) {
688 free(pos);
689 free(buf);
690 delete ptr.ptr;
691 return false;
692 }
693
694 if (textSig != icSigMultiLocalizedUnicodeType) {
695 free(pos);
696 free(buf);
697 delete ptr.ptr;
698 return false;
699 }
700
701 if (pIO->Seek(m_tagStart+pos[i].posNameLocalized.offset, icSeekSet)<0) {
702 free(pos);
703 free(buf);
704 delete ptr.ptr;
705 return false;
706 }
707
709
710 if (!pTag || !pTag->Read(pos[i].posNameLocalized.size, pIO)) {
711 free(pos);
712 free(buf);
713 delete ptr.ptr;
714 return false;
715 }
716
717 ptr.ptr->SetNameLocalized(pTag);
718 }
719
720 //Get ValueLocalized
721 if (pos[i].posValueLocalized.offset) {
722 if (pos[i].posValueLocalized.offset + pos[i].posValueLocalized.size > size ||
723 pos[i].posValueLocalized.size < sizeof(icSignature)) {
724 free(pos);
725 free(buf);
726 delete ptr.ptr;
727 return false;
728 }
729
730 if (pIO->Seek(m_tagStart+pos[i].posValueLocalized.offset, icSeekSet)<0) {
731 free(pos);
732 free(buf);
733 delete ptr.ptr;
734 return false;
735 }
736
738 if (!pIO->Read32(&textSig, 1)) {
739 free(pos);
740 free(buf);
741 delete ptr.ptr;
742 return false;
743 }
744
745 if (textSig != icSigMultiLocalizedUnicodeType) {
746 free(pos);
747 free(buf);
748 delete ptr.ptr;
749 return false;
750 }
751
752 if (pIO->Seek(m_tagStart+pos[i].posValueLocalized.offset, icSeekSet)<0) {
753 free(pos);
754 free(buf);
755 delete ptr.ptr;
756 return false;
757 }
758
760
761 if (!pTag || !pTag->Read(pos[i].posValueLocalized.size, pIO)) {
762 free(pos);
763 free(buf);
764 delete ptr.ptr;
765 return false;
766 }
767
768 ptr.ptr->SetValueLocalized(pTag);
769 }
770
771 m_Dict->push_back(ptr);
772 }
773
774 free(pos);
775 free(buf);
776
777 return true;
778}
icArraySignature sig
@ icSeekSet
Definition IccIO.h:83
void * icRealloc(void *ptr, size_t size)
Name: icRealloc.
Definition IccUtil.cpp:111
icTagTypeSignature
bool SetValueLocalized(CIccTagMultiLocalizedUnicode *pValueLocalized)
Name: CIccDictEntry::SetValueLocalized.
bool SetNameLocalized(CIccTagMultiLocalizedUnicode *pNameLocalized)
Name: CIccDictEntry::SetNameLocalized.
std::wstring & GetName()
Definition IccTagDict.h:109
bool SetValue(std::wstring sValue)
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
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
icUInt32Number m_nReserved
Class: CIccTagMultiLocalizedUnicode.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagMultiLocalizedUnicode::Read.
long icInt32Number
icUInt16Number icUnicodeChar
16-bit unicode characters
icUInt32Number icSignature
@ icSigMultiLocalizedUnicodeType
icPositionNumber posValue
icPositionNumber posName
icUInt32Number size

References Cleanup(), CIccDictEntry::GetName(), icRealloc(), icSeekSet, icSigMultiLocalizedUnicodeType, m_bBadAlignment, m_Dict, CIccTag::m_nReserved, m_tagSize, m_tagStart, icPositionNumber::offset, icDictRecordPos::posName, icDictRecordPos::posNameLocalized, icDictRecordPos::posValue, icDictRecordPos::posValueLocalized, CIccDictEntryPtr::ptr, CIccTagMultiLocalizedUnicode::Read(), CIccIO::Read16(), CIccIO::Read32(), CIccIO::Seek(), CIccDictEntry::SetNameLocalized(), CIccDictEntry::SetValue(), CIccDictEntry::SetValueLocalized(), sig, icPositionNumber::size, and CIccIO::Tell().

+ Here is the call graph for this function:

◆ Remove() [1/3]

bool CIccTagDict::Remove ( const char * szName)

Name: CIccTagDict::Remove.

Purpose: Remove a name value pair from the dictionary

Args: sName = the name to look for in the dictionary

Return: true if sName exists and was remove , or false otherwise

Definition at line 1363 of file IccTagDict.cpp.

1364{
1365 std::wstring sName(szName, szName+strlen(szName));
1366
1367 return Remove(sName);
1368}
bool Remove(std::wstring sName)
Name: CIccTagDict::Remove.

References Remove(), and szName.

+ Here is the call graph for this function:

◆ Remove() [2/3]

bool CIccTagDict::Remove ( const icUnicodeChar * szName)

Name: CIccTagDict::Remove.

Purpose: Remove a name value pair from the dictionary

Args: sName = the name to look for in the dictionary

Return: true if sName exists and was remove , or false otherwise

Definition at line 1339 of file IccTagDict.cpp.

1340{
1341 std::wstring sName;
1342 while(*szName)
1343 sName += *szName;
1344
1345 return Remove(sName);
1346
1347}

References Remove(), and szName.

+ Here is the call graph for this function:

◆ Remove() [3/3]

bool CIccTagDict::Remove ( std::wstring sName)

Name: CIccTagDict::Remove.

Purpose: Remove a name value pair from the dictionary

Args: sName = the name to look for in the dictionary

Return: true if sName exists and was removed, or false otherwise

Definition at line 1309 of file IccTagDict.cpp.

1310{
1311 CIccNameValueDict::iterator i;
1312
1313 for (i=m_Dict->begin(); i!=m_Dict->end(); i++) {
1314 if (i->ptr->GetName() == sName) {
1315 delete i->ptr;
1316
1317 m_Dict->erase(i);
1318 return true;
1319 }
1320 }
1321
1322 return false;
1323}

References m_Dict.

Referenced by Remove(), and Remove().

+ Here is the caller graph for this function:

◆ Set() [1/3]

bool CIccTagDict::Set ( const char * szName,
const char * szValue = NULL )

Definition at line 1429 of file IccTagDict.cpp.

1430{
1431 std::wstring sName(szName, szName+strlen(szName));
1432 std::wstring sValue;
1433
1434 if (szValue) {
1435 sValue.assign(szValue, szValue+strlen(szValue));
1436
1437 return Set(sName, sValue, false);
1438 }
1439
1440 return Set(sName, sValue, true);
1441}
bool Set(const char *szName, const char *szValue=NULL)

References Set(), and szName.

Referenced by Set(), and Set().

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

◆ Set() [2/3]

bool CIccTagDict::Set ( const icUnicodeChar * szName,
const icUnicodeChar * szValue = NULL )

Definition at line 1411 of file IccTagDict.cpp.

1412{
1413 std::wstring sName;
1414 while(*szName)
1415 sName += *szName;
1416
1417 std::wstring sValue;
1418
1419 if (szValue) {
1420 while(*szValue)
1421 sValue += *szValue;
1422
1423 return Set(sName, sValue, false);
1424 }
1425
1426 return Set(sName, sValue, true);
1427}

References Set(), and szName.

+ Here is the call graph for this function:

◆ Set() [3/3]

bool CIccTagDict::Set ( std::wstring sName,
std::wstring sValue,
bool bUnSet = false )

Name: CIccTagDict::Set.

Purpose: Associate a value with a name in the dictionary

Args: sName = the name to look for in the dictionary sValue = value to associate with sName bUnset = flag to indicate that value has not been set (no data for value in tag)

Return: true if value associate with sName was changed, or false if no change

Definition at line 1386 of file IccTagDict.cpp.

1387{
1388 CIccDictEntry *de = Get(sName);
1389
1390 if (de) {
1391 if (de->GetValue()==sValue && de->IsValueSet() && !bUnSet)
1392 return false;
1393 }
1394 else {
1395 de = new CIccDictEntry;
1396 de->GetName() = sName;
1397
1398 CIccDictEntryPtr ptr = {};
1399 ptr.ptr = de;
1400 m_Dict->push_back(ptr);
1401 }
1402
1403 if (sValue.empty() && bUnSet)
1404 de->UnsetValue();
1405 else
1406 de->SetValue(sValue);
1407
1408 return true;
1409}
void UnsetValue()
Definition IccTagDict.h:121

References Get(), CIccDictEntry::GetName(), CIccDictEntry::GetValue(), CIccDictEntry::IsValueSet(), m_Dict, CIccDictEntryPtr::ptr, CIccDictEntry::SetValue(), and CIccDictEntry::UnsetValue().

+ Here is the call graph for this function:

◆ SetNameLocalized() [1/3]

bool CIccTagDict::SetNameLocalized ( const char * szName,
CIccTagMultiLocalizedUnicode * pTag )

Definition at line 1468 of file IccTagDict.cpp.

1469{
1470 std::wstring sName;
1471 while(*szName)
1472 sName += *szName++;
1473
1474 return SetNameLocalized(sName, pTag);
1475}
bool SetNameLocalized(const char *szName, CIccTagMultiLocalizedUnicode *pTag)

References SetNameLocalized(), and szName.

Referenced by SetNameLocalized(), and SetNameLocalized().

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

◆ SetNameLocalized() [2/3]

bool CIccTagDict::SetNameLocalized ( const icUnicodeChar * szName,
CIccTagMultiLocalizedUnicode * pTag )

Definition at line 1459 of file IccTagDict.cpp.

1460{
1461 std::wstring sName;
1462 while(*szName)
1463 sName += *szName++;
1464
1465 return SetNameLocalized(sName, pTag);
1466}

References SetNameLocalized(), and szName.

+ Here is the call graph for this function:

◆ SetNameLocalized() [3/3]

bool CIccTagDict::SetNameLocalized ( std::wstring sName,
CIccTagMultiLocalizedUnicode * pTag )

Definition at line 1443 of file IccTagDict.cpp.

1444{
1445 CIccDictEntry *de = Get(sName);
1446
1447 if (!de) {
1448 de = new CIccDictEntry;
1449 de->GetName() = sName;
1450
1451 CIccDictEntryPtr ptr = {};
1452 ptr.ptr = de;
1453 m_Dict->push_back(ptr);
1454 }
1455
1456 return de->SetNameLocalized(pTag);
1457}

References Get(), CIccDictEntry::GetName(), m_Dict, CIccDictEntryPtr::ptr, and CIccDictEntry::SetNameLocalized().

+ Here is the call graph for this function:

◆ SetValueLocalized() [1/3]

bool CIccTagDict::SetValueLocalized ( const char * szName,
CIccTagMultiLocalizedUnicode * pTag )

Definition at line 1502 of file IccTagDict.cpp.

1503{
1504 std::wstring sName(szName, szName+strlen(szName));
1505
1506 return SetValueLocalized(sName, pTag);
1507}
bool SetValueLocalized(const char *szName, CIccTagMultiLocalizedUnicode *pTag)

References SetValueLocalized(), and szName.

Referenced by SetValueLocalized(), and SetValueLocalized().

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

◆ SetValueLocalized() [2/3]

bool CIccTagDict::SetValueLocalized ( const icUnicodeChar * szName,
CIccTagMultiLocalizedUnicode * pTag )

Definition at line 1493 of file IccTagDict.cpp.

1494{
1495 std::wstring sName;
1496 while(*szName)
1497 sName += *szName++;
1498
1499 return SetValueLocalized(sName, pTag);
1500}

References SetValueLocalized(), and szName.

+ Here is the call graph for this function:

◆ SetValueLocalized() [3/3]

bool CIccTagDict::SetValueLocalized ( std::wstring sName,
CIccTagMultiLocalizedUnicode * pTag )

Definition at line 1477 of file IccTagDict.cpp.

1478{
1479 CIccDictEntry *de = Get(sName);
1480
1481 if (!de) {
1482 de = new CIccDictEntry;
1483 de->GetName() = sName;
1484
1485 CIccDictEntryPtr ptr = {};
1486 ptr.ptr = de;
1487 m_Dict->push_back(ptr);
1488 }
1489
1490 return de->SetValueLocalized(pTag);
1491}

References Get(), CIccDictEntry::GetName(), m_Dict, CIccDictEntryPtr::ptr, and CIccDictEntry::SetValueLocalized().

+ Here is the call graph for this function:

◆ Validate()

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

Name: CIccTagDict::Validate.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 914 of file IccTagDict.cpp.

916{
917 icValidateStatus rv = CIccTag::Validate(sigPath, sReport, pProfile);
918
919 CIccInfo Info;
920 std::string sSigPathName = Info.GetSigPathName(sigPath);
921
922 // Check for duplicate tags
923 if (!AreNamesUnique()) {
924 sReport += icMsgValidateWarning;
925 sReport += sSigPathName;
926 sReport += " - There are duplicate names.\n";
928 }
929
930 if (!AreNamesNonzero()) {
931 sReport += icMsgValidateWarning;
932 sReport += sSigPathName;
933 sReport += " - There zero-length names.\n";
935 }
936
937 // Check for duplicate tags
938 if (m_bBadAlignment) {
939 sReport += icMsgValidateWarning;
940 sReport += sSigPathName;
941 sReport += " - Some Data elements are not aligned correctly\n";
943 }
944
945 return rv;
946}
icValidateStatus
Definition IccDefs.h:118
@ icValidateWarning
Definition IccDefs.h:120
icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Name: icMaxStatus.
Definition IccUtil.cpp:244
const char * icMsgValidateWarning
Definition IccUtil.cpp:90
Type: Class.
Definition IccUtil.h:303
std::string GetSigPathName(std::string sigPath)
Definition IccUtil.cpp:1614
bool AreNamesUnique() const
Name: CIccTagDict::AreNamesUnique.
bool AreNamesNonzero() const
Name: CIccTagDict::AreNamesNonzero.
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.

References AreNamesNonzero(), AreNamesUnique(), CIccInfo::GetSigPathName(), icMaxStatus(), icMsgValidateWarning, icValidateWarning, m_bBadAlignment, and CIccTag::Validate().

+ Here is the call graph for this function:

◆ Write()

bool CIccTagDict::Write ( CIccIO * pIO)
virtual

Name: CIccTagDict::Write.

Purpose:

Args:

Return:

Reimplemented from CIccTag.

Definition at line 790 of file IccTagDict.cpp.

791{
793
794 if (!pIO)
795 return false;
796
797 m_tagStart = pIO->Tell();
798
799 if (!pIO->Write32(&sig))
800 return false;
801
802 if (!pIO->Write32(&m_nReserved))
803 return false;
804
805 CIccNameValueDict::iterator i, j;
806 icUInt32Number count;
807 icUInt8Number zbuf[32];
808
809 memset(zbuf, 0, 32);
810
811 for (count=0, i=m_Dict->begin(); i!= m_Dict->end(); i++) {
812 if (i->ptr)
813 count++;
814 }
815
816 pIO->Write32(&count);
817
818 icUInt32Number recSize = MaxPosRecSize();
819 pIO->Write32(&recSize);
820
821 icDictRecordPos *pos = (icDictRecordPos*)calloc(count, sizeof(icDictRecordPos));
822 if (!pos)
823 return false;
824
825 icUInt32Number n, dirpos = pIO->Tell();
826
827 //Write Unintialized Dict rec offset array
828 for (i=m_Dict->begin(); i!= m_Dict->end(); i++) {
829 if (i->ptr) {
830 pIO->Write8(zbuf, recSize);
831 }
832 }
833
835 std::wstring::const_iterator chrptr;
836 //Write Dict records
837 for (n=0, i=m_Dict->begin(); i!= m_Dict->end(); i++) {
838 if (i->ptr) {
839 pos[n].posName.offset = pIO->Tell()-m_tagStart;
840
841 for(chrptr = i->ptr->GetName().begin(); chrptr!=i->ptr->GetName().end(); chrptr++) {
842 c=(icUnicodeChar)*chrptr;
843 pIO->Write16(&c, 1);
844 }
845 pos[n].posName.size = pIO->Tell()-m_tagStart - pos[n].posName.offset;
846 pIO->Align32();
847
848 if (i->ptr->IsValueSet()) {
849 pos[n].posValue.offset = pIO->Tell()-m_tagStart;
850 for(chrptr = i->ptr->ValueBegin(); chrptr!=i->ptr->ValueEnd(); chrptr++) {
851 c=(icUnicodeChar)*chrptr;
852 pIO->Write16(&c, 1);
853 }
854 pos[n].posValue.size = pIO->Tell()-m_tagStart - pos[n].posValue.offset;
855 pIO->Align32();
856 }
857
858 if (recSize>16 && i->ptr->GetNameLocalized()) {
859 pos[n].posNameLocalized.offset = pIO->Tell()-m_tagStart;
860 i->ptr->GetNameLocalized()->Write(pIO);
862 pIO->Align32();
863 }
864
865 if (recSize>24 && i->ptr->GetValueLocalized()) {
866 pos[n].posValueLocalized.offset = pIO->Tell()-m_tagStart;
867 i->ptr->GetValueLocalized()->Write(pIO);
869 pIO->Align32();
870 }
871 n++;
872 }
873 }
874 icUInt32Number endpos = pIO->Tell();
875
876 pIO->Seek(dirpos, icSeekSet);
877
878 //Write TagDir with offsets and sizes
879 for (n=0, i=m_Dict->begin(); i!= m_Dict->end(); i++) {
880 if (i->ptr) {
881 pIO->Write32(&pos[n].posName.offset);
882 pIO->Write32(&pos[n].posName.size);
883 pIO->Write32(&pos[n].posValue.offset);
884 pIO->Write32(&pos[n].posValue.size);
885 if (recSize>16) {
886 pIO->Write32(&pos[n].posNameLocalized.offset);
887 pIO->Write32(&pos[n].posNameLocalized.size);
888 if (recSize>24) {
889 pIO->Write32(&pos[n].posValueLocalized.offset);
890 pIO->Write32(&pos[n].posValueLocalized.size);
891 }
892 }
893 }
894 n++;
895 }
896 pIO->Seek(endpos, icSeekSet);
897
898 free(pos);
899
900 return true;
901}
virtual icInt32Number Write8(void *pBuf8, icInt32Number nNum=1)
Definition IccIO.h:105
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:122
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
icUInt32Number MaxPosRecSize()
Name: CIccTagDict::MaxPosRecSize;.
virtual icTagTypeSignature GetType() const
Function: GetType()
Definition IccTagDict.h:169
unsigned char icUInt8Number
Number definitions.
icPositionNumber posValueLocalized
icPositionNumber posNameLocalized
icUInt32Number offset

References CIccIO::Align32(), GetType(), icSeekSet, m_Dict, CIccTag::m_nReserved, m_tagStart, MaxPosRecSize(), icPositionNumber::offset, icDictRecordPos::posName, icDictRecordPos::posNameLocalized, icDictRecordPos::posValue, icDictRecordPos::posValueLocalized, CIccIO::Seek(), sig, icPositionNumber::size, CIccIO::Tell(), CIccIO::Write16(), CIccIO::Write32(), and CIccIO::Write8().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_bBadAlignment

bool CIccTagDict::m_bBadAlignment
protected

Definition at line 217 of file IccTagDict.h.

Referenced by CIccTagDict(), CIccTagDict(), Read(), and Validate().

◆ m_Dict

◆ m_tagSize

icUInt32Number CIccTagDict::m_tagSize
protected

Definition at line 221 of file IccTagDict.h.

Referenced by CIccTagDict(), CIccTagDict(), and Read().

◆ m_tagStart

icUInt32Number CIccTagDict::m_tagStart
protected

Definition at line 222 of file IccTagDict.h.

Referenced by CIccTagDict(), CIccTagDict(), Read(), and Write().


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