summaryrefslogtreecommitdiff
path: root/docs/API/classTXMPUtils.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/API/classTXMPUtils.html')
-rw-r--r--docs/API/classTXMPUtils.html2116
1 files changed, 2116 insertions, 0 deletions
diff --git a/docs/API/classTXMPUtils.html b/docs/API/classTXMPUtils.html
new file mode 100644
index 0000000..a89ff32
--- /dev/null
+++ b/docs/API/classTXMPUtils.html
@@ -0,0 +1,2116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<title>XMP-Toolkit-SDK-4.4.2: TXMPUtils&lt; tStringObj &gt; Class Template Reference</title>
+<link href="xmp.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<img src="xmp_tagline_small.jpg" width="125" height="50" border="0"><p>
+<!-- Generated by Doxygen 1.5.6 -->
+<script type="text/javascript">
+<!--
+function changeDisplayState (e){
+ var num=this.id.replace(/[^[0-9]/g,'');
+ var button=this.firstChild;
+ var sectionDiv=document.getElementById('dynsection'+num);
+ if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
+ sectionDiv.style.display='block';
+ button.src='open.gif';
+ }else{
+ sectionDiv.style.display='none';
+ button.src='closed.gif';
+ }
+}
+function initDynSections(){
+ var divs=document.getElementsByTagName('div');
+ var sectionCounter=1;
+ for(var i=0;i<divs.length-1;i++){
+ if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
+ var header=divs[i];
+ var section=divs[i+1];
+ var button=header.firstChild;
+ if (button!='IMG'){
+ divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
+ button=document.createElement('img');
+ divs[i].insertBefore(button,divs[i].firstChild);
+ }
+ header.style.cursor='pointer';
+ header.onclick=changeDisplayState;
+ header.id='dynheader'+sectionCounter;
+ button.src='closed.gif';
+ section.id='dynsection'+sectionCounter;
+ section.style.display='none';
+ section.style.marginLeft='14px';
+ sectionCounter++;
+ }
+ }
+}
+window.onload = initDynSections;
+-->
+</script>
+<div class="navigation" id="top">
+ <div class="tabs">
+ <ul>
+ <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+ <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+ <li><a href="files.html"><span>Files</span></a></li>
+ </ul>
+ </div>
+ <div class="tabs">
+ <ul>
+ <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
+ <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
+ </ul>
+ </div>
+</div>
+<div class="contents">
+<h1>TXMPUtils&lt; tStringObj &gt; Class Template Reference</h1><!-- doxytag: class="TXMPUtils" -->API for access to the XMP Toolkit utility services.
+<a href="#_details">More...</a>
+<p>
+<code>#include &lt;<a class="el" href="TXMPUtils_8hpp-source.html">TXMPUtils.hpp</a>&gt;</code>
+<p>
+
+<p>
+<a href="classTXMPUtils-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Path composition</div></td></tr>
+<tr><td colspan="2"><div class="groupText">These functions provide support for composing path expressions to deeply nested properties. The functions in <code><a class="el" href="classTXMPMeta.html" title="API for access to the XMP Toolkit core services.">TXMPMeta</a></code> such as <code><a class="el" href="classTXMPMeta.html#06a3241c7fa5df87f61dff02fca23a0c" title="GetProperty() reports whether a property exists, and retrieves its value.">TXMPMeta::GetProperty()</a></code>, <code><a class="el" href="classTXMPMeta.html#c64a4251d157937f69b73f2ffac4f7cc" title="GetArrayItem() provides access to items within an array.">TXMPMeta::GetArrayItem()</a></code>, and <code><a class="el" href="classTXMPMeta.html#885ef7127b897e349f71fa493ace3c94" title="GetStructField() provides access to fields within a nested structure.">TXMPMeta::GetStructField()</a></code> provide easy access to top level simple properties, items in top level arrays, and fields of top level structs. They are not as convenient for more complex things, such as fields several levels deep in a complex struct, or fields within an array of structs, or items of an array that is a field of a struct. You can use these utility functions to compose these paths, which you can then pass to the property access functions. You can also compose paths to top-level array items or struct fields so that you can use the binary accessors such as <code><a class="el" href="classTXMPMeta.html#3b6ba486c02607b544917091c43b05cc" title="GetProperty_Int() retrieves the value of an integer property as a C long integer...">TXMPMeta::GetProperty_Int()</a></code>.<p>
+You can use these functions is to compose a complete path expression, or all but the last component. For example, suppose you have a property that is an array of integers within a struct. You can access one of the array items like this:<p>
+<pre>
+ SXMPUtils::ComposeStructFieldPath ( schemaNS, "Struct", fieldNS, "Array", &amp;path );
+ SXMPUtils::ComposeArrayItemPath ( schemaNS, path, index, &amp;path );
+ exists = xmpObj.GetProperty_Int ( schemaNS, path, &amp;value, &amp;options );
+ </pre><p>
+You could also use this code if you want the string form of the integer:<p>
+<pre>
+ SXMPUtils::ComposeStructFieldPath ( schemaNS, "Struct", fieldNS, "Array", &amp;path );
+ xmpObj.GetArrayItem ( schemaNS, path, index, &amp;value, &amp;options );
+ </pre><p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>It might look confusing that the <code>schemaNS</code> is passed in all of the calls above. This is because the XMP Toolkit keeps the top-level "schema" namespace separate from the rest of the path expression. </dd></dl>
+<br><br></div></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#47fa195aa2e1457aa1f74f7e1ed06da6">ComposeArrayItemPath</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#00e9d9a76c144421105a4c2742203315">XMP_Index</a> itemIndex, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#47fa195aa2e1457aa1f74f7e1ed06da6" title="ComposeArrayItemPath() composes the path expression for an item in an array.">ComposeArrayItemPath()</a></code> composes the path expression for an item in an array. <a href="#47fa195aa2e1457aa1f74f7e1ed06da6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#706eb85b8401b8682a01348f7e25ee3d">ComposeStructFieldPath</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> structName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldName, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#706eb85b8401b8682a01348f7e25ee3d" title="ComposeStructFieldPath() composes the path expression for a field in a struct.">ComposeStructFieldPath()</a></code> composes the path expression for a field in a struct. <a href="#706eb85b8401b8682a01348f7e25ee3d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#40ae0ce2065fcb71725e37137884e172">ComposeQualifierPath</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> propName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> qualNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> qualName, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#40ae0ce2065fcb71725e37137884e172" title="ComposeQualifierPath() composes the path expression for a qualifier.">ComposeQualifierPath()</a></code> composes the path expression for a qualifier. <a href="#40ae0ce2065fcb71725e37137884e172"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69">ComposeLangSelector</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> langName, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69" title="ComposeLangSelector() composes the path expression to select an alternate item by...">ComposeLangSelector()</a></code> composes the path expression to select an alternate item by language. <a href="#e4989e5c199a2a4287ee3ae89b872e69"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#7882bbc2e412ff476c2d97d98808d91c">ComposeLangSelector</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, const tStringObj &amp;langName, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69" title="ComposeLangSelector() composes the path expression to select an alternate item by...">ComposeLangSelector()</a></code> composes a path expression to select an alternate item by language. <a href="#7882bbc2e412ff476c2d97d98808d91c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23">ComposeFieldSelector</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldValue, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23" title="ComposeFieldSelector() composes a path expression to select an alternate item by...">ComposeFieldSelector()</a></code> composes a path expression to select an alternate item by a field's value. <a href="#458f8e8729e2334fe54ca8f691a9db23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#d2d2361b8a4d0709ec9e3bd837265cba">ComposeFieldSelector</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> fieldName, const tStringObj &amp;fieldValue, tStringObj *fullPath)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23" title="ComposeFieldSelector() composes a path expression to select an alternate item by...">ComposeFieldSelector()</a></code> composes a path expression to select an alternate item by a field's value. <a href="#d2d2361b8a4d0709ec9e3bd837265cba"></a><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Conversion between binary types and strings</div></td></tr>
+<tr><td colspan="2"><div class="groupText">The main accessors in <code><a class="el" href="classTXMPMeta.html" title="API for access to the XMP Toolkit core services.">TXMPMeta</a></code> set and retrieve property values as strings. additional functions, such as <code>TXMPMeta::SetPropertyInt()</code>, set and retrieve property values as explicit binary data types. Use these functions to convert between binary and string values.<p>
+Strings can be specified as null-terminated UTF-8 (<code><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6" title="The type for input string parameters. A const char *, a null-terminated UTF-8 string...">XMP_StringPtr</a></code>), or as string objects (<code>tStringObj</code>) of the type declared when instantiating the XMP classes; see <code>XMP.hpp</code>. Alternate forms of each conversion function allow either type of string. <br><br></div></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#509691eb270988de6a770c9c8304ab6b">ConvertFromBool</a> (bool binValue, tStringObj *strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#509691eb270988de6a770c9c8304ab6b" title="ConvertFromBool() converts a Boolean value to a string.">ConvertFromBool()</a></code> converts a Boolean value to a string. <a href="#509691eb270988de6a770c9c8304ab6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#eec45b4d1a26717290105c9f4e8b4235">ConvertFromInt</a> (long binValue, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> format, tStringObj *strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#eec45b4d1a26717290105c9f4e8b4235" title="ConvertFromInt() converts a 32-bit integer value to a string.">ConvertFromInt()</a></code> converts a 32-bit integer value to a string. <a href="#eec45b4d1a26717290105c9f4e8b4235"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#eae4617e05358433015eaa80953c5e60">ConvertFromInt64</a> (long long binValue, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> format, tStringObj *strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#eae4617e05358433015eaa80953c5e60" title="ConvertFromInt64() converts a 64-bit integer value to a string.">ConvertFromInt64()</a></code> converts a 64-bit integer value to a string. <a href="#eae4617e05358433015eaa80953c5e60"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#e67ef3931836432b7e574832f0610ed0">ConvertFromFloat</a> (double binValue, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> format, tStringObj *strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#e67ef3931836432b7e574832f0610ed0" title="ConvertFromFloat() converts a floating-point value to a string.">ConvertFromFloat()</a></code> converts a floating-point value to a string. <a href="#e67ef3931836432b7e574832f0610ed0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#6146a522a3974b4088d6e8241e9cd223">ConvertFromDate</a> (const <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> &amp;binValue, tStringObj *strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#6146a522a3974b4088d6e8241e9cd223" title="ConvertFromDate() converts a date/time value to a string.">ConvertFromDate()</a></code> converts a date/time value to a string. <a href="#6146a522a3974b4088d6e8241e9cd223"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#aaaaadb23f4089daa795f50cba4f405c">ConvertToBool</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#aaaaadb23f4089daa795f50cba4f405c" title="ConvertToBool() converts a string to a Boolean value.">ConvertToBool()</a></code> converts a string to a Boolean value. <a href="#aaaaadb23f4089daa795f50cba4f405c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#84f2a7b3960a17315032915674e21960">ConvertToBool</a> (const tStringObj &amp;strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#aaaaadb23f4089daa795f50cba4f405c" title="ConvertToBool() converts a string to a Boolean value.">ConvertToBool()</a></code> converts a string to a Boolean value. <a href="#84f2a7b3960a17315032915674e21960"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#dfd9d1c522377d5db4ad667a7973ba00">ConvertToInt</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#dfd9d1c522377d5db4ad667a7973ba00" title="ConvertToInt() converts a string to a 32-bit integer value.">ConvertToInt()</a></code> converts a string to a 32-bit integer value. <a href="#dfd9d1c522377d5db4ad667a7973ba00"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#47d93f9cb4acd9d7ec6b450100209bec">ConvertToInt</a> (const tStringObj &amp;strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#dfd9d1c522377d5db4ad667a7973ba00" title="ConvertToInt() converts a string to a 32-bit integer value.">ConvertToInt()</a></code> converts a string to a 32-bit integer value. <a href="#47d93f9cb4acd9d7ec6b450100209bec"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static long long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#be5d2dcc03c5442202203bba5ca7b172">ConvertToInt64</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#be5d2dcc03c5442202203bba5ca7b172" title="ConvertToInt64() converts a string to a 64-bit integer value.">ConvertToInt64()</a></code> converts a string to a 64-bit integer value. <a href="#be5d2dcc03c5442202203bba5ca7b172"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static long long&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#711cae0cb1b673ff5e208b4ae458d120">ConvertToInt64</a> (const tStringObj &amp;strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#be5d2dcc03c5442202203bba5ca7b172" title="ConvertToInt64() converts a string to a 64-bit integer value.">ConvertToInt64()</a></code> converts a string to a 64-bit integer value. <a href="#711cae0cb1b673ff5e208b4ae458d120"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#8a507b006286460814e0486c622d828c">ConvertToFloat</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#8a507b006286460814e0486c622d828c" title="ConvertToFloat() converts a string to a floating-point value.">ConvertToFloat()</a></code> converts a string to a floating-point value. <a href="#8a507b006286460814e0486c622d828c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#abd4e479d2708a9ea3135cd441faa7ea">ConvertToFloat</a> (const tStringObj &amp;strValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#8a507b006286460814e0486c622d828c" title="ConvertToFloat() converts a string to a floating-point value.">ConvertToFloat()</a></code> converts a string to a floating-point value. <a href="#abd4e479d2708a9ea3135cd441faa7ea"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#60d33e6ce30286028acca47b2b6e7a0b">ConvertToDate</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> strValue, <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *binValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#60d33e6ce30286028acca47b2b6e7a0b" title="ConvertToDate() converts a string to a date/time value.">ConvertToDate()</a></code> converts a string to a date/time value. <a href="#60d33e6ce30286028acca47b2b6e7a0b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#265559d1b4b78e34a460e935c11177d7">ConvertToDate</a> (const tStringObj &amp;strValue, <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *binValue)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#60d33e6ce30286028acca47b2b6e7a0b" title="ConvertToDate() converts a string to a date/time value.">ConvertToDate()</a></code> converts a string to a date/time value. <a href="#265559d1b4b78e34a460e935c11177d7"></a><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Date-time manipulation</div></td></tr>
+<tr><td colspan="2"><div class="groupText">In addition to the type-conversion functions that convert between strings and binary date-time values, these functions create, manipulate, and compare date-time values. <br><br></div></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#c83f0b963ea64d7eee0b481e15a8439c">CurrentDateTime</a> (<a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *time)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#c83f0b963ea64d7eee0b481e15a8439c" title="CurrentDateTime() obtains the current date and time.">CurrentDateTime()</a></code> obtains the current date and time. <a href="#c83f0b963ea64d7eee0b481e15a8439c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#96bcc45febac55f6c49951815b7de2ef">SetTimeZone</a> (<a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *time)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#96bcc45febac55f6c49951815b7de2ef" title="SetTimeZone() sets the time zone in a date/time value to the local time zone.">SetTimeZone()</a></code> sets the time zone in a date/time value to the local time zone. <a href="#96bcc45febac55f6c49951815b7de2ef"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#bbd4d691c83287ea2fc6b1e33e5858b8">ConvertToUTCTime</a> (<a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *time)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#bbd4d691c83287ea2fc6b1e33e5858b8" title="ConvertToUTCTime() ensures that a time is UTC.">ConvertToUTCTime()</a></code> ensures that a time is UTC. <a href="#bbd4d691c83287ea2fc6b1e33e5858b8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#61852aaba494c8fbad5a6c0c4caf21f5">ConvertToLocalTime</a> (<a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *time)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#61852aaba494c8fbad5a6c0c4caf21f5" title="ConvertToLocalTime() ensures that a time is local.">ConvertToLocalTime()</a></code> ensures that a time is local. <a href="#61852aaba494c8fbad5a6c0c4caf21f5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#9fc7f1771032f59f9020aeda4f91991d">CompareDateTime</a> (const <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> &amp;left, const <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> &amp;right)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#9fc7f1771032f59f9020aeda4f91991d" title="CompareDateTime() compares the order of two date/time values.">CompareDateTime()</a></code> compares the order of two date/time values. <a href="#9fc7f1771032f59f9020aeda4f91991d"></a><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Base64 encoding and decoding</div></td></tr>
+<tr><td colspan="2"><div class="groupText">These functions convert between raw data values and Base64-encoded strings. <br><br></div></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#ef3b23bbc152480f699e269620ecad4a">EncodeToBase64</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> rawStr, <a class="el" href="XMP__Const_8h.html#9f7dcc184f901c713274edfdac5bcc9a">XMP_StringLen</a> rawLen, tStringObj *encodedStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#ef3b23bbc152480f699e269620ecad4a" title="EncodeToBase64() converts a raw data value to a Base64-encoded string.">EncodeToBase64()</a></code> converts a raw data value to a Base64-encoded string. <a href="#ef3b23bbc152480f699e269620ecad4a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#39d5de77b29441a30f2f879755b8e7d8">EncodeToBase64</a> (const tStringObj &amp;rawStr, tStringObj *encodedStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#ef3b23bbc152480f699e269620ecad4a" title="EncodeToBase64() converts a raw data value to a Base64-encoded string.">EncodeToBase64()</a></code> converts a raw data value passed in a string object to a Base64-encoded string. <a href="#39d5de77b29441a30f2f879755b8e7d8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#e5bdd91c0c3ee9262dc0a8b9f591b921">DecodeFromBase64</a> (<a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> encodedStr, <a class="el" href="XMP__Const_8h.html#9f7dcc184f901c713274edfdac5bcc9a">XMP_StringLen</a> encodedLen, tStringObj *rawStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#e5bdd91c0c3ee9262dc0a8b9f591b921" title="DecodeFromBase64() Decodes a Base64-encoded string to raw data.">DecodeFromBase64()</a></code> Decodes a Base64-encoded string to raw data. <a href="#e5bdd91c0c3ee9262dc0a8b9f591b921"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#1e61e273065b10517ca127d5a553a8dc">DecodeFromBase64</a> (const tStringObj &amp;encodedStr, tStringObj *rawStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#e5bdd91c0c3ee9262dc0a8b9f591b921" title="DecodeFromBase64() Decodes a Base64-encoded string to raw data.">DecodeFromBase64()</a></code> Decodes a Base64-encoded string, passed as a string object, to raw data. <a href="#1e61e273065b10517ca127d5a553a8dc"></a><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">JPEG file handling</div></td></tr>
+<tr><td colspan="2"><div class="groupText">These functions support the partitioning of XMP in JPEG files into standard and extended portions in order to work around the 64KB size limit of JPEG marker segments.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>(Doc note) Add detail about how to write out and read back extended data </dd></dl>
+<br><br></div></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#6001b4ff54c60fdf0c40e6b78a5c457a">PackageForJPEG</a> (const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;xmpObj, tStringObj *standardXMP, tStringObj *extendedXMP, tStringObj *extendedDigest)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#6001b4ff54c60fdf0c40e6b78a5c457a" title="PackageForJPEG() creates XMP serializations appropriate for a JPEG file.">PackageForJPEG()</a></code> creates XMP serializations appropriate for a JPEG file. <a href="#6001b4ff54c60fdf0c40e6b78a5c457a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#6187cd5fef0eccecac6805d4114dcd2e">MergeFromJPEG</a> (<a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *fullXMP, const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;extendedXMP)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#6187cd5fef0eccecac6805d4114dcd2e" title="MergeFromJPEG() merges standard and extended XMP retrieved from a JPEG file.">MergeFromJPEG()</a></code> merges standard and extended XMP retrieved from a JPEG file. <a href="#6187cd5fef0eccecac6805d4114dcd2e"></a><br></td></tr>
+<tr><td colspan="2"><div class="groupHeader">Editing utilities</div></td></tr>
+<tr><td colspan="2"><div class="groupText">These functions are useful in implementing a user interface for editing XMP. They convert sets of property values to and from displayable and manipulable strings, and perform operations on sets of metadata, such as those available from the File Info dialog box. <br><br></div></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#d7e1aa7928252fb88a24fb5c3aef22ba">CatenateArrayItems</a> (const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;xmpObj, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> separator, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> quotes, <a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a> options, tStringObj *catedStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#d7e1aa7928252fb88a24fb5c3aef22ba" title="CatenateArrayItems() creates a single edit string from a set of array item values...">CatenateArrayItems()</a></code> creates a single edit string from a set of array item values. <a href="#d7e1aa7928252fb88a24fb5c3aef22ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#66c5ddee47aa36ed906353f94ca18d2e">SeparateArrayItems</a> (<a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *xmpObj, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a> options, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> catedStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#66c5ddee47aa36ed906353f94ca18d2e" title="SeparateArrayItems() updates an array from a concatenated edit string of values.">SeparateArrayItems()</a></code> updates an array from a concatenated edit string of values. <a href="#66c5ddee47aa36ed906353f94ca18d2e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#1bb2ed614886ff67863744ec56041c43">SeparateArrayItems</a> (<a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *xmpObj, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> arrayName, <a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a> options, const tStringObj &amp;catedStr)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#66c5ddee47aa36ed906353f94ca18d2e" title="SeparateArrayItems() updates an array from a concatenated edit string of values.">SeparateArrayItems()</a></code> updates an array from a concatenated edit string of values. <a href="#1bb2ed614886ff67863744ec56041c43"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#40c645803530662e08d042b4b7c6190d">RemoveProperties</a> (<a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *xmpObj, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> schemaNS=0, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> propName=0, <a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a> options=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#40c645803530662e08d042b4b7c6190d" title="RemoveProperties() removes multiple properties from an XMP object.">RemoveProperties()</a></code> removes multiple properties from an XMP object. <a href="#40c645803530662e08d042b4b7c6190d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#4795244ffcbda927800f789b0e40c262">AppendProperties</a> (const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;source, <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *dest, <a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a> options=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#4795244ffcbda927800f789b0e40c262" title="AppendProperties() adds or moves properties from one XMP object to another.">AppendProperties()</a></code> adds or moves properties from one XMP object to another. <a href="#4795244ffcbda927800f789b0e40c262"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTXMPUtils.html#a17838f062e5414bc0929f67ac94a3aa">DuplicateSubtree</a> (const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;source, <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *dest, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> sourceNS, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> sourceRoot, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> destNS=0, <a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a> destRoot=0, <a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a> options=0)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><code><a class="el" href="classTXMPUtils.html#a17838f062e5414bc0929f67ac94a3aa" title="DuplicateSubtree() replicates a subtree from one XMP object into another.">DuplicateSubtree()</a></code> replicates a subtree from one XMP object into another. <a href="#a17838f062e5414bc0929f67ac94a3aa"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;class tStringObj&gt;<br>
+ class TXMPUtils&lt; tStringObj &gt;</h3>
+
+API for access to the XMP Toolkit utility services.
+<p>
+<code><a class="el" href="classTXMPUtils.html" title="API for access to the XMP Toolkit utility services.">TXMPUtils</a></code> is a template class which must be instantiated with a string class such as <code>std::string</code>. See the instructions in XMP.hpp, and the Overview for a discussion of the overall architecture of the XMP API.<p>
+This class defines helper functions that support the basic metadata manipulation provided by <code><a class="el" href="classTXMPMeta.html" title="API for access to the XMP Toolkit core services.">TXMPMeta</a></code>. All of the functions are static; that is, you call them directly from the concrete class (<code>SXMPUtils</code>), which is never itself instantiated.<p>
+General categories of utilities include:<p>
+<ul>
+<li>Composing complex path expressions, which you can then pass to the property access functions in <code><a class="el" href="classTXMPMeta.html" title="API for access to the XMP Toolkit core services.">TXMPMeta</a></code> </li>
+<li>Converting between binary and string forms of property values </li>
+<li>Manipulating date/time values </li>
+<li>Encoding and decoding base-64 strings </li>
+<li>JPEG file handling </li>
+<li>Editing aids for creating a user interface for the XMP Toolkit </li>
+</ul>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="47fa195aa2e1457aa1f74f7e1ed06da6"></a><!-- doxytag: member="TXMPUtils::ComposeArrayItemPath" ref="47fa195aa2e1457aa1f74f7e1ed06da6" args="(XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_Index itemIndex, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeArrayItemPath </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#00e9d9a76c144421105a4c2742203315">XMP_Index</a>&nbsp;</td>
+ <td class="paramname"> <em>itemIndex</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#47fa195aa2e1457aa1f74f7e1ed06da6" title="ComposeArrayItemPath() composes the path expression for an item in an array.">ComposeArrayItemPath()</a></code> composes the path expression for an item in an array.
+<p>
+The returned string is in the form <code>ns:arrayName[i]</code>, where "ns" is the prefix for the specified namespace, and "i" is the decimal representation of specified item index. If the last item was specified, the path is <code>ns:arrayName[last()]</code>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI for the array; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>itemIndex</em>&nbsp;</td><td>The 1-based index of the desired item. Use the macro <code><a class="el" href="XMP__Const_8h.html#9549b9a138a896257b5a70176d125317" title="Options macro accesses last array item.">kXMP_ArrayLastItem</a></code> to specify the last existing array item.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="706eb85b8401b8682a01348f7e25ee3d"></a><!-- doxytag: member="TXMPUtils::ComposeStructFieldPath" ref="706eb85b8401b8682a01348f7e25ee3d" args="(XMP_StringPtr schemaNS, XMP_StringPtr structName, XMP_StringPtr fieldNS, XMP_StringPtr fieldName, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeStructFieldPath </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>structName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#706eb85b8401b8682a01348f7e25ee3d" title="ComposeStructFieldPath() composes the path expression for a field in a struct.">ComposeStructFieldPath()</a></code> composes the path expression for a field in a struct.
+<p>
+The returned string is in the form <code>ns:structName/fNS:fieldName</code>, where "ns" is the prefix for the schema namespace, and "fNS" is the prefix for field namespace.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI for the struct; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>structName</em>&nbsp;</td><td>The name of the struct. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldNS</em>&nbsp;</td><td>The namespace URI for the field. Same URI and prefix usage as the <code>schemaNS</code> and <code>structName</code> parameters.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldName</em>&nbsp;</td><td>The name of the field. Must be a single XML name, must not be null or the empty string. Same URI and prefix usage as the <code>schemaNS</code> and <code>structName</code> parameters.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="40ae0ce2065fcb71725e37137884e172"></a><!-- doxytag: member="TXMPUtils::ComposeQualifierPath" ref="40ae0ce2065fcb71725e37137884e172" args="(XMP_StringPtr schemaNS, XMP_StringPtr propName, XMP_StringPtr qualNS, XMP_StringPtr qualName, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeQualifierPath </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>propName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>qualNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>qualName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#40ae0ce2065fcb71725e37137884e172" title="ComposeQualifierPath() composes the path expression for a qualifier.">ComposeQualifierPath()</a></code> composes the path expression for a qualifier.
+<p>
+The returned string is in the form <code>ns:propName/?qNS:qualName</code>, where "ns" is the prefix for the schema namespace, and "qNS" is the prefix for the qualifier namespace.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>propName</em>&nbsp;</td><td>The name of the property to which the qualifier is attached. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>qualNS</em>&nbsp;</td><td>The namespace URI for the qualifier. Same URI and prefix usage as the <code>schemaNS</code> and <code>propName</code> parameters.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>qualName</em>&nbsp;</td><td>The name of the qualifier. Must be a single XML name, must not be null or the empty string. Same URI and prefix usage as the <code>schemaNS</code> and <code>propName</code> parameters.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e4989e5c199a2a4287ee3ae89b872e69"></a><!-- doxytag: member="TXMPUtils::ComposeLangSelector" ref="e4989e5c199a2a4287ee3ae89b872e69" args="(XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_StringPtr langName, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeLangSelector </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>langName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69" title="ComposeLangSelector() composes the path expression to select an alternate item by...">ComposeLangSelector()</a></code> composes the path expression to select an alternate item by language.
+<p>
+Path syntax allows two forms of "content addressing" to select an item in an array of alternatives. The form used in this function lets you select an item in an alt-text array based on the value of its <code>xml:lang</code> qualifier. The other form of content addressing is shown in <code><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23" title="ComposeFieldSelector() composes a path expression to select an alternate item by...">ComposeFieldSelector()</a></code>.<p>
+The returned string is in the form <code>ns:arrayName[@xml:lang='langName']</code>, where "ns" is the prefix for the schema namespace<p>
+This function provides a path expression that is explicitly and only for a specific language. In most cases, <code><a class="el" href="classTXMPMeta.html#f9531b949a462f5663b1f3fd99464c19" title="SetLocalizedText() modifies the value of a selected item in an alt-text array.">TXMPMeta::SetLocalizedText()</a></code> and <code><a class="el" href="classTXMPMeta.html#eefe49bbf669770d769f4fe0ea566bd0" title="GetLocalizedText() retrieves information about a selected item in an alt-text array...">TXMPMeta::GetLocalizedText()</a></code> are preferred, because they provide extra logic to choose the appropriate language and maintain consistency with the 'x-default' value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI for the array; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>langName</em>&nbsp;</td><td>The RFC 3066 code for the desired language, as a null-terminated UTF-8 string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="7882bbc2e412ff476c2d97d98808d91c"></a><!-- doxytag: member="TXMPUtils::ComposeLangSelector" ref="7882bbc2e412ff476c2d97d98808d91c" args="(XMP_StringPtr schemaNS, XMP_StringPtr arrayName, const tStringObj &amp;langName, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeLangSelector </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>langName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69" title="ComposeLangSelector() composes the path expression to select an alternate item by...">ComposeLangSelector()</a></code> composes a path expression to select an alternate item by language.
+<p>
+Path syntax allows two forms of "content addressing" to select an item in an array of alternatives. The form used in this function lets you select an item in an alt-text array based on the value of its <code>xml:lang</code> qualifier. The other form of content addressing is shown in <code><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23" title="ComposeFieldSelector() composes a path expression to select an alternate item by...">ComposeFieldSelector()</a></code>.<p>
+The returned string is in the form <code>ns:arrayName[@xml:lang='langName']</code>, where "ns" is the prefix for the schema namespace<p>
+This function provides a path expression that is explicitly and only for a specific language. In most cases, <code><a class="el" href="classTXMPMeta.html#f9531b949a462f5663b1f3fd99464c19" title="SetLocalizedText() modifies the value of a selected item in an alt-text array.">TXMPMeta::SetLocalizedText()</a></code> and <code><a class="el" href="classTXMPMeta.html#eefe49bbf669770d769f4fe0ea566bd0" title="GetLocalizedText() retrieves information about a selected item in an alt-text array...">TXMPMeta::GetLocalizedText()</a></code> are preferred, because they provide extra logic to choose the appropriate language and maintain consistency with the 'x-default' value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI for the array; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>langName</em>&nbsp;</td><td>The RFC 3066 code for the desired language, as a string object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="458f8e8729e2334fe54ca8f691a9db23"></a><!-- doxytag: member="TXMPUtils::ComposeFieldSelector" ref="458f8e8729e2334fe54ca8f691a9db23" args="(XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_StringPtr fieldNS, XMP_StringPtr fieldName, XMP_StringPtr fieldValue, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeFieldSelector </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23" title="ComposeFieldSelector() composes a path expression to select an alternate item by...">ComposeFieldSelector()</a></code> composes a path expression to select an alternate item by a field's value.
+<p>
+Path syntax allows two forms of "content addressing" to select an item in an array of alternatives. The form used in this function lets you select an item in an array of structs based on the value of one of the fields in the structs. The other form of content addressing is shown in <code><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69" title="ComposeLangSelector() composes the path expression to select an alternate item by...">ComposeLangSelector()</a></code>.<p>
+For example, consider a simple struct that has two fields, the name of a city and the URI of an FTP site in that city. Use this to create an array of download alternatives. You can show the user a popup built from the values of the city fields, then get the corresponding URI as follows: <pre>
+ ComposeFieldSelector ( schemaNS, "Downloads", fieldNS, "City", chosenCity, &amp;path );
+ exists = GetStructField ( schemaNS, path, fieldNS, "URI", &amp;uri );
+ </pre><p>
+The returned string is in the form <code>ns:arrayName[fNS:fieldName='fieldValue']</code>, where "ns" is the prefix for the schema namespace and "fNS" is the prefix for the field namespace.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI for the array; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldNS</em>&nbsp;</td><td>The namespace URI for the field used as the selector. Same URI and prefix usage as the <code>schemaNS</code> and <code>arrayName</code> parameters.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldName</em>&nbsp;</td><td>The name of the field used as the selector. Must be a single XML name, must not be null or the empty string. It must be the name of a field that is itself simple.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldValue</em>&nbsp;</td><td>The desired value of the field, specified as a null-terminated UTF-8 string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="d2d2361b8a4d0709ec9e3bd837265cba"></a><!-- doxytag: member="TXMPUtils::ComposeFieldSelector" ref="d2d2361b8a4d0709ec9e3bd837265cba" args="(XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_StringPtr fieldNS, XMP_StringPtr fieldName, const tStringObj &amp;fieldValue, tStringObj *fullPath)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ComposeFieldSelector </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>fieldName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>fieldValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>fullPath</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#458f8e8729e2334fe54ca8f691a9db23" title="ComposeFieldSelector() composes a path expression to select an alternate item by...">ComposeFieldSelector()</a></code> composes a path expression to select an alternate item by a field's value.
+<p>
+Path syntax allows two forms of "content addressing" to select an item in an array of alternatives. The form used in this function lets you select an item in an array of structs based on the value of one of the fields in the structs. The other form of content addressing is shown in <code><a class="el" href="classTXMPUtils.html#e4989e5c199a2a4287ee3ae89b872e69" title="ComposeLangSelector() composes the path expression to select an alternate item by...">ComposeLangSelector()</a></code>.<p>
+For example, consider a simple struct that has two fields, the name of a city and the URI of an FTP site in that city. Use this to create an array of download alternatives. You can show the user a popup built from the values of the city fields, then get the corresponding URI as follows: <pre>
+ ComposeFieldSelector ( schemaNS, "Downloads", fieldNS, "City", chosenCity, &amp;path );
+ exists = GetStructField ( schemaNS, path, fieldNS, "URI", &amp;uri );
+ </pre><p>
+The returned string is in the form <code>ns:arrayName[fNS:fieldName='fieldValue']</code>, where "ns" is the prefix for the schema namespace and "fNS" is the prefix for the field namespace.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The namespace URI for the array; see <code>GetProperty()</code>.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. Can be a general path expression, must not be null or the empty string; see <code>GetProperty()</code> for namespace prefix usage.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldNS</em>&nbsp;</td><td>The namespace URI for the field used as the selector. Same URI and prefix usage as the <code>schemaNS</code> and <code>arrayName</code> parameters.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldName</em>&nbsp;</td><td>The name of the field used as the selector. Must be a single XML name, must not be null or the empty string. It must be the name of a field that is itself simple.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fieldValue</em>&nbsp;</td><td>The desired value of the field, specified as a string object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>fullPath</em>&nbsp;</td><td>[out] A string in which to return the composed path. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="509691eb270988de6a770c9c8304ab6b"></a><!-- doxytag: member="TXMPUtils::ConvertFromBool" ref="509691eb270988de6a770c9c8304ab6b" args="(bool binValue, tStringObj *strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertFromBool </td>
+ <td>(</td>
+ <td class="paramtype">bool&nbsp;</td>
+ <td class="paramname"> <em>binValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>strValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#509691eb270988de6a770c9c8304ab6b" title="ConvertFromBool() converts a Boolean value to a string.">ConvertFromBool()</a></code> converts a Boolean value to a string.
+<p>
+The string values of Booleans are returned by the macros <code><a class="el" href="XMP__Const_8h.html#4c39e0131b0e3d7db66e1cfa82b67141" title="The canonical true string value for Booleans in serialized XMP.">kXMP_TrueStr</a></code> and <code><a class="el" href="XMP__Const_8h.html#2dc55b533ed63ed7ff0c3be16a97e278" title="The canonical false string value for Booleans in serialized XMP.">kXMP_FalseStr</a></code> in <code><a class="el" href="XMP__Const_8h.html" title="Common C/C++ types and constants for the XMP toolkit.">XMP_Const.h</a></code>.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>The Boolean value to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>[out] A buffer in which to return the string representation of the value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="eec45b4d1a26717290105c9f4e8b4235"></a><!-- doxytag: member="TXMPUtils::ConvertFromInt" ref="eec45b4d1a26717290105c9f4e8b4235" args="(long binValue, XMP_StringPtr format, tStringObj *strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertFromInt </td>
+ <td>(</td>
+ <td class="paramtype">long&nbsp;</td>
+ <td class="paramname"> <em>binValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>strValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#eec45b4d1a26717290105c9f4e8b4235" title="ConvertFromInt() converts a 32-bit integer value to a string.">ConvertFromInt()</a></code> converts a 32-bit integer value to a string.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>The integer value to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>format</em>&nbsp;</td><td>Optional. A C <code>sprintf</code> format for the conversion. Default is "%d".</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>[out] A buffer in which to return the string representation of the value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="eae4617e05358433015eaa80953c5e60"></a><!-- doxytag: member="TXMPUtils::ConvertFromInt64" ref="eae4617e05358433015eaa80953c5e60" args="(long long binValue, XMP_StringPtr format, tStringObj *strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertFromInt64 </td>
+ <td>(</td>
+ <td class="paramtype">long long&nbsp;</td>
+ <td class="paramname"> <em>binValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>strValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#eae4617e05358433015eaa80953c5e60" title="ConvertFromInt64() converts a 64-bit integer value to a string.">ConvertFromInt64()</a></code> converts a 64-bit integer value to a string.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>The integer value to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>format</em>&nbsp;</td><td>Optional. A C <code>sprintf</code> format for the conversion. Default is "%d".</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>[out] A buffer in which to return the string representation of the value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e67ef3931836432b7e574832f0610ed0"></a><!-- doxytag: member="TXMPUtils::ConvertFromFloat" ref="e67ef3931836432b7e574832f0610ed0" args="(double binValue, XMP_StringPtr format, tStringObj *strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertFromFloat </td>
+ <td>(</td>
+ <td class="paramtype">double&nbsp;</td>
+ <td class="paramname"> <em>binValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>format</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>strValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#e67ef3931836432b7e574832f0610ed0" title="ConvertFromFloat() converts a floating-point value to a string.">ConvertFromFloat()</a></code> converts a floating-point value to a string.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>The floating-point value to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>format</em>&nbsp;</td><td>Optional. A C <code>sprintf</code> format for the conversion. Default is "%d".</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>[out] A buffer in which to return the string representation of the value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="6146a522a3974b4088d6e8241e9cd223"></a><!-- doxytag: member="TXMPUtils::ConvertFromDate" ref="6146a522a3974b4088d6e8241e9cd223" args="(const XMP_DateTime &amp;binValue, tStringObj *strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertFromDate </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> &amp;&nbsp;</td>
+ <td class="paramname"> <em>binValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>strValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#6146a522a3974b4088d6e8241e9cd223" title="ConvertFromDate() converts a date/time value to a string.">ConvertFromDate()</a></code> converts a date/time value to a string.
+<p>
+Formats a date according to the ISO 8601 profile in <a href="http://www.w3.org/TR/NOTE-datetime:">http://www.w3.org/TR/NOTE-datetime:</a> <pre>
+ YYYY
+ YYYY-MM
+ YYYY-MM-DD
+ YYYY-MM-DDThh:mmTZD
+ YYYY-MM-DDThh:mm:ssTZD
+ YYYY-MM-DDThh:mm:ss.sTZD
+ </pre><p>
+<code>YYYY</code> = four-digit year, formatted as "%.4d" <br>
+ <code>MM</code> = two-digit month (01=January) <br>
+ <code>DD</code> = two-digit day of month (01 through 31) <br>
+ <code>hh</code> = two digits of hour (00 through 23) <br>
+ <code>mm</code> = two digits of minute (00 through 59) <br>
+ <code>ss</code> = two digits of second (00 through 59) <br>
+ <code>s</code> = one or more digits representing a decimal fraction of a second <br>
+ <code>TZD</code> = time zone designator (Z or +hh:mm or -hh:mm)<p>
+Time-only input is allowed where the year, month, and day are all zero. This is output as "0000-00-00...".<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>ISO 8601 does not allow years less than 1000 or greater than 9999. This API allows any year, even negative ones.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>The date/time value to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>[out] A buffer in which to return the ISO 8601 string representation of the date/time. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="aaaaadb23f4089daa795f50cba4f405c"></a><!-- doxytag: member="TXMPUtils::ConvertToBool" ref="aaaaadb23f4089daa795f50cba4f405c" args="(XMP_StringPtr strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static bool <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToBool </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#aaaaadb23f4089daa795f50cba4f405c" title="ConvertToBool() converts a string to a Boolean value.">ConvertToBool()</a></code> converts a string to a Boolean value.
+<p>
+The preferred strings are those returned by the macros <code><a class="el" href="XMP__Const_8h.html#4c39e0131b0e3d7db66e1cfa82b67141" title="The canonical true string value for Booleans in serialized XMP.">kXMP_TrueStr</a></code> and <code><a class="el" href="XMP__Const_8h.html#2dc55b533ed63ed7ff0c3be16a97e278" title="The canonical false string value for Booleans in serialized XMP.">kXMP_FalseStr</a></code>. If these do not match, the function does a case insensitive comparison, then simply 't' or 'f', and finally non-zero and zero integer representations.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a null-terminated UTF-8 string.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The appropriate C++ bool value for the string. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="84f2a7b3960a17315032915674e21960"></a><!-- doxytag: member="TXMPUtils::ConvertToBool" ref="84f2a7b3960a17315032915674e21960" args="(const tStringObj &amp;strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static bool <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToBool </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#aaaaadb23f4089daa795f50cba4f405c" title="ConvertToBool() converts a string to a Boolean value.">ConvertToBool()</a></code> converts a string to a Boolean value.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object, rather than a <code>const * char</code>. It is otherwise identical; see details in the canonical form.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a string object.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The appropriate C++ bool value for the string. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="dfd9d1c522377d5db4ad667a7973ba00"></a><!-- doxytag: member="TXMPUtils::ConvertToInt" ref="dfd9d1c522377d5db4ad667a7973ba00" args="(XMP_StringPtr strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static long <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToInt </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#dfd9d1c522377d5db4ad667a7973ba00" title="ConvertToInt() converts a string to a 32-bit integer value.">ConvertToInt()</a></code> converts a string to a 32-bit integer value.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a null-terminated UTF-8 string.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The 32-bit integer value. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="47d93f9cb4acd9d7ec6b450100209bec"></a><!-- doxytag: member="TXMPUtils::ConvertToInt" ref="47d93f9cb4acd9d7ec6b450100209bec" args="(const tStringObj &amp;strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static long <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToInt </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#dfd9d1c522377d5db4ad667a7973ba00" title="ConvertToInt() converts a string to a 32-bit integer value.">ConvertToInt()</a></code> converts a string to a 32-bit integer value.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object, rather than a <code>const * char</code>. It is otherwise identical.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a string object.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The 32-bit integer value. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="be5d2dcc03c5442202203bba5ca7b172"></a><!-- doxytag: member="TXMPUtils::ConvertToInt64" ref="be5d2dcc03c5442202203bba5ca7b172" args="(XMP_StringPtr strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static long long <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToInt64 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#be5d2dcc03c5442202203bba5ca7b172" title="ConvertToInt64() converts a string to a 64-bit integer value.">ConvertToInt64()</a></code> converts a string to a 64-bit integer value.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a null-terminated UTF-8 string.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The 64-bit integer value. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="711cae0cb1b673ff5e208b4ae458d120"></a><!-- doxytag: member="TXMPUtils::ConvertToInt64" ref="711cae0cb1b673ff5e208b4ae458d120" args="(const tStringObj &amp;strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static long long <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToInt64 </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#be5d2dcc03c5442202203bba5ca7b172" title="ConvertToInt64() converts a string to a 64-bit integer value.">ConvertToInt64()</a></code> converts a string to a 64-bit integer value.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object, rather than a <code>const * char</code>. It is otherwise identical.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a string object.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The 64-bit integer value. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="8a507b006286460814e0486c622d828c"></a><!-- doxytag: member="TXMPUtils::ConvertToFloat" ref="8a507b006286460814e0486c622d828c" args="(XMP_StringPtr strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static double <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToFloat </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#8a507b006286460814e0486c622d828c" title="ConvertToFloat() converts a string to a floating-point value.">ConvertToFloat()</a></code> converts a string to a floating-point value.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a null-terminated UTF-8 string.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The floating-point value. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="abd4e479d2708a9ea3135cd441faa7ea"></a><!-- doxytag: member="TXMPUtils::ConvertToFloat" ref="abd4e479d2708a9ea3135cd441faa7ea" args="(const tStringObj &amp;strValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static double <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToFloat </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>strValue</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#8a507b006286460814e0486c622d828c" title="ConvertToFloat() converts a string to a floating-point value.">ConvertToFloat()</a></code> converts a string to a floating-point value.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object, rather than a <code>const * char</code>. It is otherwise identical.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The string representation of the value, specified as a string object.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>The floating-point value. </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="60d33e6ce30286028acca47b2b6e7a0b"></a><!-- doxytag: member="TXMPUtils::ConvertToDate" ref="60d33e6ce30286028acca47b2b6e7a0b" args="(XMP_StringPtr strValue, XMP_DateTime *binValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToDate </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>strValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *&nbsp;</td>
+ <td class="paramname"> <em>binValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#60d33e6ce30286028acca47b2b6e7a0b" title="ConvertToDate() converts a string to a date/time value.">ConvertToDate()</a></code> converts a string to a date/time value.
+<p>
+Parses a date according to the ISO 8601 profile in <a href="http://www.w3.org/TR/NOTE-datetime:">http://www.w3.org/TR/NOTE-datetime:</a> <pre>
+ YYYY
+ YYYY-MM
+ YYYY-MM-DD
+ YYYY-MM-DDThh:mmTZD
+ YYYY-MM-DDThh:mm:ssTZD
+ YYYY-MM-DDThh:mm:ss.sTZD
+ </pre><p>
+<code>YYYY</code> = four-digit year, formatted as "%.4d" <br>
+ <code>MM</code> = two-digit month (01=January) <br>
+ <code>DD</code> = two-digit day of month (01 through 31) <br>
+ <code>hh</code> = two digits of hour (00 through 23) <br>
+ <code>mm</code> = two digits of minute (00 through 59) <br>
+ <code>ss</code> = two digits of second (00 through 59) <br>
+ <code>s</code> = one or more digits representing a decimal fraction of a second <br>
+ <code>TZD</code> = time zone designator (Z or +hh:mm or -hh:mm)<p>
+A missing date portion or missing TZD are tolerated. A missing date value can begin with "Thh:" or "hh:"; the year, month, and day are all set to zero in the <code><a class="el" href="structXMP__DateTime.html" title="The expanded type for a date and time.">XMP_DateTime</a></code> value. A missing TZD is assumed to be UTC.<p>
+<dl class="note" compact><dt><b>Note:</b></dt><dd>ISO 8601 does not allow years less than 1000 or greater than 9999. This API allows any year, even negative ones.</dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The ISO 8601 string representation of the date/time, specified as a null-terminated UTF-8 string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>[out] A buffer in which to return the binary date/time value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="265559d1b4b78e34a460e935c11177d7"></a><!-- doxytag: member="TXMPUtils::ConvertToDate" ref="265559d1b4b78e34a460e935c11177d7" args="(const tStringObj &amp;strValue, XMP_DateTime *binValue)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToDate </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>strValue</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *&nbsp;</td>
+ <td class="paramname"> <em>binValue</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#60d33e6ce30286028acca47b2b6e7a0b" title="ConvertToDate() converts a string to a date/time value.">ConvertToDate()</a></code> converts a string to a date/time value.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object, rather than a <code>const * char</code>. It is otherwise identical. See details for the canonical form.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>strValue</em>&nbsp;</td><td>The ISO 8601 string representation of the date/time, specified as a string object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>binValue</em>&nbsp;</td><td>[out] A buffer in which to return the binary date/time value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="c83f0b963ea64d7eee0b481e15a8439c"></a><!-- doxytag: member="TXMPUtils::CurrentDateTime" ref="c83f0b963ea64d7eee0b481e15a8439c" args="(XMP_DateTime *time)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::CurrentDateTime </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *&nbsp;</td>
+ <td class="paramname"> <em>time</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#c83f0b963ea64d7eee0b481e15a8439c" title="CurrentDateTime() obtains the current date and time.">CurrentDateTime()</a></code> obtains the current date and time.
+<p>
+Creates and returns a binary <code><a class="el" href="structXMP__DateTime.html" title="The expanded type for a date and time.">XMP_DateTime</a></code> value. The returned time is UTC, properly adjusted for the local time zone. The resolution of the time is not guaranteed to be finer than seconds.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>time</em>&nbsp;</td><td>[out] A buffer in which to return the date/time value. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="96bcc45febac55f6c49951815b7de2ef"></a><!-- doxytag: member="TXMPUtils::SetTimeZone" ref="96bcc45febac55f6c49951815b7de2ef" args="(XMP_DateTime *time)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::SetTimeZone </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *&nbsp;</td>
+ <td class="paramname"> <em>time</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#96bcc45febac55f6c49951815b7de2ef" title="SetTimeZone() sets the time zone in a date/time value to the local time zone.">SetTimeZone()</a></code> sets the time zone in a date/time value to the local time zone.
+<p>
+Any existing time zone value is replaced. The other date/time fields are not adjusted in any way.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>time</em>&nbsp;</td><td>A pointer to the date-time value, which is modified in place. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="bbd4d691c83287ea2fc6b1e33e5858b8"></a><!-- doxytag: member="TXMPUtils::ConvertToUTCTime" ref="bbd4d691c83287ea2fc6b1e33e5858b8" args="(XMP_DateTime *time)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToUTCTime </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *&nbsp;</td>
+ <td class="paramname"> <em>time</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#bbd4d691c83287ea2fc6b1e33e5858b8" title="ConvertToUTCTime() ensures that a time is UTC.">ConvertToUTCTime()</a></code> ensures that a time is UTC.
+<p>
+If the time zone is not UTC, the time is adjusted and the time zone set to be UTC. If the time zone is already UTC, the value is not modified.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>time</em>&nbsp;</td><td>A pointer to the date-time value, which is modified in place. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="61852aaba494c8fbad5a6c0c4caf21f5"></a><!-- doxytag: member="TXMPUtils::ConvertToLocalTime" ref="61852aaba494c8fbad5a6c0c4caf21f5" args="(XMP_DateTime *time)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::ConvertToLocalTime </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> *&nbsp;</td>
+ <td class="paramname"> <em>time</em> </td>
+ <td>&nbsp;)&nbsp;</td>
+ <td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#61852aaba494c8fbad5a6c0c4caf21f5" title="ConvertToLocalTime() ensures that a time is local.">ConvertToLocalTime()</a></code> ensures that a time is local.
+<p>
+If the time zone is not the local zone, the time is adjusted and the time zone set to be local. If the time zone is already the local zone, the value is not modified.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>time</em>&nbsp;</td><td>A pointer to the date-time value, which is modified in place. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="9fc7f1771032f59f9020aeda4f91991d"></a><!-- doxytag: member="TXMPUtils::CompareDateTime" ref="9fc7f1771032f59f9020aeda4f91991d" args="(const XMP_DateTime &amp;left, const XMP_DateTime &amp;right)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static int <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::CompareDateTime </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> &amp;&nbsp;</td>
+ <td class="paramname"> <em>left</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="structXMP__DateTime.html">XMP_DateTime</a> &amp;&nbsp;</td>
+ <td class="paramname"> <em>right</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#9fc7f1771032f59f9020aeda4f91991d" title="CompareDateTime() compares the order of two date/time values.">CompareDateTime()</a></code> compares the order of two date/time values.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>left</em>&nbsp;</td><td>The left-side date/time value.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>right</em>&nbsp;</td><td>The right-side date/time value.</td></tr>
+ </table>
+</dl>
+<dl class="return" compact><dt><b>Returns:</b></dt><dd>An integer indicating the order: <ul>
+<li>-1 if left is earlier than right </li>
+<li>0 if left matches right </li>
+<li>+1 if left is later than right </li>
+</ul>
+</dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="ef3b23bbc152480f699e269620ecad4a"></a><!-- doxytag: member="TXMPUtils::EncodeToBase64" ref="ef3b23bbc152480f699e269620ecad4a" args="(XMP_StringPtr rawStr, XMP_StringLen rawLen, tStringObj *encodedStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::EncodeToBase64 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>rawStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#9f7dcc184f901c713274edfdac5bcc9a">XMP_StringLen</a>&nbsp;</td>
+ <td class="paramname"> <em>rawLen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>encodedStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#ef3b23bbc152480f699e269620ecad4a" title="EncodeToBase64() converts a raw data value to a Base64-encoded string.">EncodeToBase64()</a></code> converts a raw data value to a Base64-encoded string.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>rawStr</em>&nbsp;</td><td>An <code><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6" title="The type for input string parameters. A const char *, a null-terminated UTF-8 string...">XMP_StringPtr</a></code> (char *) string containing the raw data to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>rawLen</em>&nbsp;</td><td>The number of characters of raw data to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>encodedStr</em>&nbsp;</td><td>[out] A string object in which to return the encoded string. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="39d5de77b29441a30f2f879755b8e7d8"></a><!-- doxytag: member="TXMPUtils::EncodeToBase64" ref="39d5de77b29441a30f2f879755b8e7d8" args="(const tStringObj &amp;rawStr, tStringObj *encodedStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::EncodeToBase64 </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>rawStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>encodedStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#ef3b23bbc152480f699e269620ecad4a" title="EncodeToBase64() converts a raw data value to a Base64-encoded string.">EncodeToBase64()</a></code> converts a raw data value passed in a string object to a Base64-encoded string.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object as input. It is otherwise identical.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>rawStr</em>&nbsp;</td><td>A string object containing the raw data to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>encodedStr</em>&nbsp;</td><td>[out] A string object in which to return the encoded string. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="e5bdd91c0c3ee9262dc0a8b9f591b921"></a><!-- doxytag: member="TXMPUtils::DecodeFromBase64" ref="e5bdd91c0c3ee9262dc0a8b9f591b921" args="(XMP_StringPtr encodedStr, XMP_StringLen encodedLen, tStringObj *rawStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::DecodeFromBase64 </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>encodedStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#9f7dcc184f901c713274edfdac5bcc9a">XMP_StringLen</a>&nbsp;</td>
+ <td class="paramname"> <em>encodedLen</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>rawStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#e5bdd91c0c3ee9262dc0a8b9f591b921" title="DecodeFromBase64() Decodes a Base64-encoded string to raw data.">DecodeFromBase64()</a></code> Decodes a Base64-encoded string to raw data.
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>encodedStr</em>&nbsp;</td><td>An <code><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6" title="The type for input string parameters. A const char *, a null-terminated UTF-8 string...">XMP_StringPtr</a></code> (char *) string containing the encoded data to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>encodedLen</em>&nbsp;</td><td>The number of characters of raw data to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>rawStr</em>&nbsp;</td><td>[out] A string object in which to return the decoded data. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="1e61e273065b10517ca127d5a553a8dc"></a><!-- doxytag: member="TXMPUtils::DecodeFromBase64" ref="1e61e273065b10517ca127d5a553a8dc" args="(const tStringObj &amp;encodedStr, tStringObj *rawStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::DecodeFromBase64 </td>
+ <td>(</td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>encodedStr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>rawStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#e5bdd91c0c3ee9262dc0a8b9f591b921" title="DecodeFromBase64() Decodes a Base64-encoded string to raw data.">DecodeFromBase64()</a></code> Decodes a Base64-encoded string, passed as a string object, to raw data.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object as input. It is otherwise identical.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>encodedStr</em>&nbsp;</td><td>An string object containing the encoded data to be converted.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>rawStr</em>&nbsp;</td><td>[out] A string object in which to return the decoded data. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="6001b4ff54c60fdf0c40e6b78a5c457a"></a><!-- doxytag: member="TXMPUtils::PackageForJPEG" ref="6001b4ff54c60fdf0c40e6b78a5c457a" args="(const TXMPMeta&lt; tStringObj &gt; &amp;xmpObj, tStringObj *standardXMP, tStringObj *extendedXMP, tStringObj *extendedDigest)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::PackageForJPEG </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;&nbsp;</td>
+ <td class="paramname"> <em>xmpObj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>standardXMP</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>extendedXMP</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>extendedDigest</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#6001b4ff54c60fdf0c40e6b78a5c457a" title="PackageForJPEG() creates XMP serializations appropriate for a JPEG file.">PackageForJPEG()</a></code> creates XMP serializations appropriate for a JPEG file.
+<p>
+The standard XMP in a JPEG file is limited to 64K bytes. This function serializes the XMP metadata in an XMP object into a string of RDF (see <code><a class="el" href="classTXMPMeta.html#2774a6f15ae22f0002201b58c46bfb49" title="SerializeToBuffer() serializes metadata in this XMP object into a string as RDF.">TXMPMeta::SerializeToBuffer()</a></code>). If the data does not fit into the 64K byte limit, it creates a second packet string with the extended data.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>xmpObj</em>&nbsp;</td><td>The XMP object containing the metadata.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>standardXMP</em>&nbsp;</td><td>[out] A string object in which to return the full standard XMP packet.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>extendedXMP</em>&nbsp;</td><td>[out] A string object in which to return the serialized extended XMP, empty if not needed.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>extendedDigest</em>&nbsp;</td><td>[out] A string object in which to return an MD5 digest of the serialized extended XMP, empty if not needed.</td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><code><a class="el" href="classTXMPUtils.html#6187cd5fef0eccecac6805d4114dcd2e" title="MergeFromJPEG() merges standard and extended XMP retrieved from a JPEG file.">MergeFromJPEG()</a></code> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="6187cd5fef0eccecac6805d4114dcd2e"></a><!-- doxytag: member="TXMPUtils::MergeFromJPEG" ref="6187cd5fef0eccecac6805d4114dcd2e" args="(TXMPMeta&lt; tStringObj &gt; *fullXMP, const TXMPMeta&lt; tStringObj &gt; &amp;extendedXMP)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::MergeFromJPEG </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *&nbsp;</td>
+ <td class="paramname"> <em>fullXMP</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;&nbsp;</td>
+ <td class="paramname"> <em>extendedXMP</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#6187cd5fef0eccecac6805d4114dcd2e" title="MergeFromJPEG() merges standard and extended XMP retrieved from a JPEG file.">MergeFromJPEG()</a></code> merges standard and extended XMP retrieved from a JPEG file.
+<p>
+When an extended partition stores properties that do not fit into the JPEG file limitation of 64K bytes, this function integrates those properties back into the same XMP object with those from the standard XMP packet.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>fullXMP</em>&nbsp;</td><td>[in, out] An XMP object which the caller has initialized from the standard XMP packet in a JPEG file. The extended XMP is added to this object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>extendedXMP</em>&nbsp;</td><td>An XMP object which the caller has initialized from the extended XMP packet in a JPEG file.</td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><code><a class="el" href="classTXMPUtils.html#6001b4ff54c60fdf0c40e6b78a5c457a" title="PackageForJPEG() creates XMP serializations appropriate for a JPEG file.">PackageForJPEG()</a></code> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="d7e1aa7928252fb88a24fb5c3aef22ba"></a><!-- doxytag: member="TXMPUtils::CatenateArrayItems" ref="d7e1aa7928252fb88a24fb5c3aef22ba" args="(const TXMPMeta&lt; tStringObj &gt; &amp;xmpObj, XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_StringPtr separator, XMP_StringPtr quotes, XMP_OptionBits options, tStringObj *catedStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::CatenateArrayItems </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;&nbsp;</td>
+ <td class="paramname"> <em>xmpObj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>separator</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>quotes</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a>&nbsp;</td>
+ <td class="paramname"> <em>options</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">tStringObj *&nbsp;</td>
+ <td class="paramname"> <em>catedStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#d7e1aa7928252fb88a24fb5c3aef22ba" title="CatenateArrayItems() creates a single edit string from a set of array item values...">CatenateArrayItems()</a></code> creates a single edit string from a set of array item values.
+<p>
+Collects the values of all items in an array into a single string, using a specified separation string. Each item in the specified array must be a simple string value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>xmpObj</em>&nbsp;</td><td>The XMP object containing the array to be catenated.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The schema namespace URI for the array. Must not be null or the empty string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. May be a general path expression, must not be null or the empty string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>separator</em>&nbsp;</td><td>The string with which to separate the items in the catenated string. Defaults to "; ", ASCII semicolon and space (U+003B, U+0020).</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>quotes</em>&nbsp;</td><td>The character or characters to use as quotes around array items that contain a separator. Defaults to the double-quote character ("), ASCII quote (U+0022).</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>Option flags to control the catenation. &lt;&lt;what options?&gt;&gt;</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>catedStr</em>&nbsp;</td><td>[out] A string object in which to return the catenated array items.</td></tr>
+ </table>
+</dl>
+<dl class="see" compact><dt><b>See also:</b></dt><dd><code><a class="el" href="classTXMPUtils.html#66c5ddee47aa36ed906353f94ca18d2e" title="SeparateArrayItems() updates an array from a concatenated edit string of values.">SeparateArrayItems()</a></code> </dd></dl>
+
+</div>
+</div><p>
+<a class="anchor" name="66c5ddee47aa36ed906353f94ca18d2e"></a><!-- doxytag: member="TXMPUtils::SeparateArrayItems" ref="66c5ddee47aa36ed906353f94ca18d2e" args="(TXMPMeta&lt; tStringObj &gt; *xmpObj, XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_OptionBits options, XMP_StringPtr catedStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::SeparateArrayItems </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *&nbsp;</td>
+ <td class="paramname"> <em>xmpObj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a>&nbsp;</td>
+ <td class="paramname"> <em>options</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>catedStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#66c5ddee47aa36ed906353f94ca18d2e" title="SeparateArrayItems() updates an array from a concatenated edit string of values.">SeparateArrayItems()</a></code> updates an array from a concatenated edit string of values.
+<p>
+This reverses the action of <code><a class="el" href="classTXMPUtils.html#d7e1aa7928252fb88a24fb5c3aef22ba" title="CatenateArrayItems() creates a single edit string from a set of array item values...">CatenateArrayItems()</a></code>, separating out individual array items from the edit string and updating the array with the new values. Each item in the array must be a simple string value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>xmpObj</em>&nbsp;</td><td>The XMP object containing the array to be updated.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>The schema namespace URI for the array. Must not be null or the empty string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>arrayName</em>&nbsp;</td><td>The name of the array. May be a general path expression, must not be null or the empty string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>Option flags to control the separation. &lt;&lt;what options?&gt;&gt;</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>catedStr</em>&nbsp;</td><td>The concatenated array items, as created by <code><a class="el" href="classTXMPUtils.html#d7e1aa7928252fb88a24fb5c3aef22ba" title="CatenateArrayItems() creates a single edit string from a set of array item values...">CatenateArrayItems()</a></code>, specified as a null-terminated UTF-8 string. </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="1bb2ed614886ff67863744ec56041c43"></a><!-- doxytag: member="TXMPUtils::SeparateArrayItems" ref="1bb2ed614886ff67863744ec56041c43" args="(TXMPMeta&lt; tStringObj &gt; *xmpObj, XMP_StringPtr schemaNS, XMP_StringPtr arrayName, XMP_OptionBits options, const tStringObj &amp;catedStr)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::SeparateArrayItems </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *&nbsp;</td>
+ <td class="paramname"> <em>xmpObj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>arrayName</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a>&nbsp;</td>
+ <td class="paramname"> <em>options</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const tStringObj &amp;&nbsp;</td>
+ <td class="paramname"> <em>catedStr</em></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#66c5ddee47aa36ed906353f94ca18d2e" title="SeparateArrayItems() updates an array from a concatenated edit string of values.">SeparateArrayItems()</a></code> updates an array from a concatenated edit string of values.
+<p>
+Overloads the basic form of the function, allowing you to pass a string object in which to return the concatenated string. It is otherwise identical; see details for the canonical form.
+</div>
+</div><p>
+<a class="anchor" name="40c645803530662e08d042b4b7c6190d"></a><!-- doxytag: member="TXMPUtils::RemoveProperties" ref="40c645803530662e08d042b4b7c6190d" args="(TXMPMeta&lt; tStringObj &gt; *xmpObj, XMP_StringPtr schemaNS=0, XMP_StringPtr propName=0, XMP_OptionBits options=0)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::RemoveProperties </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *&nbsp;</td>
+ <td class="paramname"> <em>xmpObj</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>schemaNS</em> = <code>0</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>propName</em> = <code>0</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a>&nbsp;</td>
+ <td class="paramname"> <em>options</em> = <code>0</code></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#40c645803530662e08d042b4b7c6190d" title="RemoveProperties() removes multiple properties from an XMP object.">RemoveProperties()</a></code> removes multiple properties from an XMP object.
+<p>
+The operation depends on how the namespace and property are specified:<p>
+<ul>
+<li>Non-empty <code>schemaNS</code> and <code>propName</code> - The named property is removed if it is an external property, or if the <code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a578ddfb0572b7602a52e533d92d8b1e9fb" title="Do all properties, default is just external properties.">kXMPUtil_DoAllProperties</a></code> option flag is set. It does not matter whether the named property is an actual property or an alias.</li>
+</ul>
+<ul>
+<li>Non-empty <code>schemaNS</code> and empty <code>propName</code> - All external properties in the named schema are removed. Internal properties are also removed if the <code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a578ddfb0572b7602a52e533d92d8b1e9fb" title="Do all properties, default is just external properties.">kXMPUtil_DoAllProperties</a></code> option flag is set. In addition, aliases from the named schema are removed if the <code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a57843589b878f53d42d59258f945ad770b" title="Include aliases, default is just actual properties.">kXMPUtil_IncludeAliases</a></code> option flag is set.</li>
+</ul>
+<ul>
+<li>Empty <code>schemaNS</code> and empty <code>propName</code> - All external properties in all schemas are removed. Internal properties are also removed if the <code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a578ddfb0572b7602a52e533d92d8b1e9fb" title="Do all properties, default is just external properties.">kXMPUtil_DoAllProperties</a></code> option flag is set. Aliases are handled implicitly, because the associated actuals are removed or not.</li>
+</ul>
+<ul>
+<li>It is an error to pass an empty <code>schemaNS</code> and non-empty <code>propName</code>.</li>
+</ul>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>xmpObj</em>&nbsp;</td><td>The XMP object containing the properties to be removed.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>schemaNS</em>&nbsp;</td><td>Optional schema namespace URI for the properties to be removed.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>propName</em>&nbsp;</td><td>Optional path expression for the property to be removed.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>Option flags to control the deletion operation. A logical OR of these bit-flag constants: <ul>
+<li><code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a578ddfb0572b7602a52e533d92d8b1e9fb" title="Do all properties, default is just external properties.">kXMPUtil_DoAllProperties</a></code> - Delete internal properties in addition to external properties. </li>
+<li><code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a57843589b878f53d42d59258f945ad770b" title="Include aliases, default is just actual properties.">kXMPUtil_IncludeAliases</a></code> - Include aliases if the schema is explicitly specified. </li>
+</ul>
+</td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="4795244ffcbda927800f789b0e40c262"></a><!-- doxytag: member="TXMPUtils::AppendProperties" ref="4795244ffcbda927800f789b0e40c262" args="(const TXMPMeta&lt; tStringObj &gt; &amp;source, TXMPMeta&lt; tStringObj &gt; *dest, XMP_OptionBits options=0)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::AppendProperties </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;&nbsp;</td>
+ <td class="paramname"> <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *&nbsp;</td>
+ <td class="paramname"> <em>dest</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a>&nbsp;</td>
+ <td class="paramname"> <em>options</em> = <code>0</code></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#4795244ffcbda927800f789b0e40c262" title="AppendProperties() adds or moves properties from one XMP object to another.">AppendProperties()</a></code> adds or moves properties from one XMP object to another.
+<p>
+The default operation is to append only external properties that do not already exist in the destination. Option flags allow you to add internal properties, and to merge values of properties that exist in both the source and destination.<p>
+<ul>
+<li><code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a578ddfb0572b7602a52e533d92d8b1e9fb" title="Do all properties, default is just external properties.">kXMPUtil_DoAllProperties</a>:</code> Operate on all top-level properties, external and internal. You can use this flag together with <code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a57dab4dad658d2d218c5b1e7d829b12962" title="Replace existing values, default is to leave them.">kXMPUtil_ReplaceOldValues</a></code> to replace the values of existing top-level properties.</li>
+</ul>
+<ul>
+<li><code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a57dab4dad658d2d218c5b1e7d829b12962" title="Replace existing values, default is to leave them.">kXMPUtil_ReplaceOldValues</a>:</code> Propogate all top-level properties from the source to the destination, replacing any existing values. The values of properties in the destination that are not in the source are not modified.<br>
+ The keep-or-replace-old notion also applies within structs and arrays. Top-level properties are added to the destination if they do not already exist. If they do exist but differ in form (simple/struct/array) then the destination is not modified. If the forms match, simple properties are left unchanged, while structs and arrays are merged.<br>
+ Do not use this option when the processing is more complicated. &lt;&lt;than what??&gt;&gt;</li>
+</ul>
+<ul>
+<li><code><a class="el" href="XMP__Const_8h.html#b04a0655cd1e3bcac5e8f48c18df1a5797753b4c5afda9c55e807e41377d86d9" title="Delete properties if the new value is empty.">kXMPUtil_DeleteEmptyValues</a>:</code> An empty value in the source XMP causes the corresponding destination property to be deleted. By default, empty values are treated in the same way as non-empty values. An empty value is a simple empty string, an array with no items,or a struct with no fields. Qualifiers are ignored.</li>
+</ul>
+The detailed behavior is defined by the following pseudo-code:<p>
+<pre>
+ AppendProperties ( sourceXMP, destXMP, options ):
+ doAll = options &amp; kXMPUtil_DoAllProperties
+ replaceOld = options &amp; kXMPUtil_ReplaceOldValues
+ deleteEmpty = options &amp; kXMPUtil_DeleteEmptyValues
+ for all source schema (top level namespaces):
+ for all top level properties in sourceSchema:
+ if doAll or prop is external:
+ AppendSubtree ( sourceNode, destSchema, replaceOld, deleteEmpty )</pre><p>
+<pre> AppendSubtree ( sourceNode, destParent, replaceOld, deleteEmpty ):
+ if deleteEmpty and source value is empty:
+ delete the corresponding child from destParent
+ else if sourceNode not in destParent (by name):
+ copy sourceNode's subtree to destParent
+ else if replaceOld:
+ delete subtree from destParent
+ copy sourceNode's subtree to destParent
+ else: // (Already exists in dest and not replacing, merge structs and arrays)
+ if sourceNode and destNode forms differ:
+ return, leave the destNode alone
+ else if form is a struct:
+ for each field in sourceNode:
+ AppendSubtree ( sourceNode.field, destNode, replaceOld )
+ else if form is an alt-text array:
+ copy new items by xml:lang value into the destination
+ else if form is an array:
+ copy new items by value into the destination, ignoring order and duplicates
+ </pre><p>
+Array item checking is n-squared; this can be time-intensive if the replace-old options is not specified. Each source item is checked to see if it already exists in the destination, without regard to order or duplicates. Simple items are compared by value and <code>xml:lang</code> qualifier; other qualifiers are ignored. Structs are recursively compared by field names, without regard to field order. Arrays are compared by recursively comparing all items.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td>The source XMP object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>The destination XMP object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>Option flags to control the copying. A logical OR of these bit-flag constants: <ul>
+<li><code>kXMPUtil_DoAllProperties</code> - Operate on internal properties in addition to external properties. </li>
+<li><code>kXMPUtil_ReplaceOldValues</code> - Replace the values of existing properties. </li>
+<li><code>kXMPUtil_DeleteEmptyValues</code> - Delete properties if the new value is empty. </li>
+</ul>
+</td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<a class="anchor" name="a17838f062e5414bc0929f67ac94a3aa"></a><!-- doxytag: member="TXMPUtils::DuplicateSubtree" ref="a17838f062e5414bc0929f67ac94a3aa" args="(const TXMPMeta&lt; tStringObj &gt; &amp;source, TXMPMeta&lt; tStringObj &gt; *dest, XMP_StringPtr sourceNS, XMP_StringPtr sourceRoot, XMP_StringPtr destNS=0, XMP_StringPtr destRoot=0, XMP_OptionBits options=0)" -->
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;class tStringObj&gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">static void <a class="el" href="classTXMPUtils.html">TXMPUtils</a>&lt; tStringObj &gt;::DuplicateSubtree </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; &amp;&nbsp;</td>
+ <td class="paramname"> <em>source</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classTXMPMeta.html">TXMPMeta</a>&lt; tStringObj &gt; *&nbsp;</td>
+ <td class="paramname"> <em>dest</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>sourceNS</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>sourceRoot</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>destNS</em> = <code>0</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#d439e3ceeb4590d310f6125aa12c6df6">XMP_StringPtr</a>&nbsp;</td>
+ <td class="paramname"> <em>destRoot</em> = <code>0</code>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="XMP__Const_8h.html#eb865118433be92d88e5f49ed11487c8">XMP_OptionBits</a>&nbsp;</td>
+ <td class="paramname"> <em>options</em> = <code>0</code></td><td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td><td><code> [static]</code></td>
+ </tr>
+ </table>
+</div>
+<div class="memdoc">
+
+<p>
+<code><a class="el" href="classTXMPUtils.html#a17838f062e5414bc0929f67ac94a3aa" title="DuplicateSubtree() replicates a subtree from one XMP object into another.">DuplicateSubtree()</a></code> replicates a subtree from one XMP object into another.
+<p>
+The destination can be a different namespace and root location in the same object, or the same or a different location in another XMP object.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td>The source XMP object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>The destination XMP object.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>sourceNS</em>&nbsp;</td><td>The schema namespace URI for the source subtree.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>sourceRoot</em>&nbsp;</td><td>The root location for the source subtree. Can be a general path expression, must not be null or the empty string.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>destNS</em>&nbsp;</td><td>The schema namespace URI for the destination. Defaults to the source namespace.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>destRoot</em>&nbsp;</td><td>The root location for the destination. Can be a general path expression. Defaults to the source location.</td></tr>
+ <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>Option flags to control the operation. &lt;&lt;options?&gt;&gt; </td></tr>
+ </table>
+</dl>
+
+</div>
+</div><p>
+<hr>The documentation for this class was generated from the following file:<ul>
+<li><a class="el" href="TXMPUtils_8hpp-source.html">TXMPUtils.hpp</a></ul>
+</div>
+<hr size="1"><address style="text-align: right;"><small>
+XMP-Toolkit-SDK-4.4.2 documentation generated by&nbsp;<a href="http://www.doxygen.org/index.html">doxygen</a> 1.5.6</small></address>
+</body>
+</html>