1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
// =================================================================================================
// Copyright 2004 Adobe
// All Rights Reserved.
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
// of the Adobe license agreement accompanying it.
// =================================================================================================
#include "public/include/XMP_Environment.h" // ! This must be the first include!
#include "public/include/XMP_Const.h"
#include "public/include/client-glue/WXMPIterator.hpp"
#include "XMPCore/source/XMPCore_Impl.hpp"
#include "XMPCore/source/XMPIterator.hpp"
#if XMP_WinBuild
#pragma warning ( disable : 4101 ) // unreferenced local variable
#pragma warning ( disable : 4189 ) // local variable is initialized but not referenced
#pragma warning ( disable : 4800 ) // forcing value to bool 'true' or 'false' (performance warning)
#if XMP_DebugBuild
#pragma warning ( disable : 4297 ) // function assumed not to throw an exception but does
#endif
#endif
#if __cplusplus
extern "C" {
#endif
// =================================================================================================
// CTor/DTor Wrappers
// ==================
void
WXMPIterator_PropCTor_1 ( XMPMetaRef xmpRef,
XMP_StringPtr schemaNS,
XMP_StringPtr propName,
XMP_OptionBits options,
WXMP_Result * wResult )
{
XMP_ENTER_Static ( "WXMPIterator_PropCTor_1" ) // No lib object yet, use the static entry.
if ( schemaNS == 0 ) schemaNS = "";
if ( propName == 0 ) propName = "";
const XMPMeta & xmpObj = WtoXMPMeta_Ref ( xmpRef );
XMP_AutoLock metaLock ( &xmpObj.lock, kXMP_ReadLock );
XMPIterator * iter = NULL;
if (!iter) {
iter = new XMPIterator(xmpObj, schemaNS, propName, options);
}
++iter->clientRefs;
XMP_Assert ( iter->clientRefs == 1 );
wResult->ptrResult = XMPIteratorRef ( iter );
XMP_EXIT
}
// -------------------------------------------------------------------------------------------------
void
WXMPIterator_IncrementRefCount_1 ( XMPIteratorRef xmpObjRef )
{
WXMP_Result void_wResult;
WXMP_Result * wResult = &void_wResult; // ! Needed to "fool" the EnterWrapper macro.
XMP_ENTER_ObjWrite ( XMPIterator, "WXMPIterator_IncrementRefCount_1" )
++thiz->clientRefs;
XMP_Assert ( thiz->clientRefs > 1 );
XMP_EXIT_NoThrow
}
// -------------------------------------------------------------------------------------------------
void
WXMPIterator_DecrementRefCount_1 ( XMPIteratorRef xmpObjRef )
{
WXMP_Result void_wResult;
WXMP_Result * wResult = &void_wResult; // ! Needed to "fool" the EnterWrapper macro.
XMP_ENTER_ObjWrite ( XMPIterator, "WXMPIterator_DecrementRefCount_1" )
XMP_Assert ( thiz->clientRefs > 0 );
--thiz->clientRefs;
if ( thiz->clientRefs <= 0 ) {
objLock.Release();
delete ( thiz );
}
XMP_EXIT_NoThrow
}
// =================================================================================================
// Class Method Wrappers
// =====================
void
WXMPIterator_Next_1 ( XMPIteratorRef xmpObjRef,
void * schemaNS,
void * propPath,
void * propValue,
XMP_OptionBits * propOptions,
SetClientStringProc SetClientString,
WXMP_Result * wResult )
{
XMP_ENTER_ObjWrite ( XMPIterator, "WXMPIterator_Next_1" )
XMP_StringPtr schemaPtr = 0;
XMP_StringLen schemaLen = 0;
XMP_StringPtr pathPtr = 0;
XMP_StringLen pathLen = 0;
XMP_StringPtr valuePtr = 0;
XMP_StringLen valueLen = 0;
XMP_OptionBits voidOptionBits = 0;
if ( propOptions == 0 ) propOptions = &voidOptionBits;
XMP_Assert( thiz->info.xmpObj != NULL );
XMP_AutoLock metaLock ( &thiz->info.xmpObj->lock, kXMP_ReadLock, (thiz->info.xmpObj != 0) );
XMP_Bool found = thiz->Next ( &schemaPtr, &schemaLen, &pathPtr, &pathLen, &valuePtr, &valueLen, propOptions );
wResult->int32Result = found;
if ( found ) {
if ( schemaNS != 0 ) (*SetClientString) ( schemaNS, schemaPtr, schemaLen );
if ( propPath != 0 ) (*SetClientString) ( propPath, pathPtr, pathLen );
if ( propValue != 0 ) (*SetClientString) ( propValue, valuePtr, valueLen );
}
XMP_EXIT
}
// -------------------------------------------------------------------------------------------------
void
WXMPIterator_Skip_1 ( XMPIteratorRef xmpObjRef,
XMP_OptionBits options,
WXMP_Result * wResult )
{
XMP_ENTER_ObjWrite ( XMPIterator, "WXMPIterator_Skip_1" )
XMP_Assert( thiz->info.xmpObj != NULL );
XMP_AutoLock metaLock ( &thiz->info.xmpObj->lock, kXMP_ReadLock, (thiz->info.xmpObj != 0) );
thiz->Skip ( options );
XMP_EXIT
}
// =================================================================================================
#if __cplusplus
} /* extern "C" */
#endif
|