Wrapper.h revision 2c1d6e606706dfdb0920a2b083e8d1073f282b47
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync/* $Id$ */
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync/** @file
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync *
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * VirtualBox COM: API wrapper helpers
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync */
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync/*
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * Copyright (C) 2012-2013 Oracle Corporation
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync *
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * available from http://www.virtualbox.org. This file is free software;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * you can redistribute it and/or modify it under the terms of the GNU
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * General Public License (GPL) as published by the Free Software
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync */
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifndef ____H_WRAPPER
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#define ____H_WRAPPER
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#include <vector>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#include <VBox/com/ptr.h>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#include <VBox/com/array.h>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
9f3a515a29d45728a5c5330459abd3429e35bda1vboxsync#include "AutoCaller.h"
9f3a515a29d45728a5c5330459abd3429e35bda1vboxsync
9f3a515a29d45728a5c5330459abd3429e35bda1vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync/**
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * Checks that the given pointer to an output argument is valid and throws
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * E_POINTER + extended error info otherwise.
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync * @param arg Pointer argument.
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync */
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#define CheckComArgOutPointerValidThrow(arg) \
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync do { \
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (RT_UNLIKELY(!VALID_PTR(arg))) \
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync throw setError(E_POINTER, \
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync tr("Output argument %s points to invalid memory location (%p)"), \
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync #arg, (void *)(arg)); \
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync } while (0)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass BSTROutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTROutConverter() : mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTROutConverter(BSTR *aDst) : mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~BSTROutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync Bstr(mStr).detachTo(mDst);
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::Utf8Str &str()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mStr;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::Utf8Str mStr;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTR *mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass BSTRInConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTRInConverter() : mSrc()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTRInConverter(CBSTR aSrc) : mSrc(aSrc)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~BSTRInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const com::Utf8Str &str()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mSrc;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const com::Utf8Str mSrc;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayBSTROutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayBSTROutConverter() :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(NULL),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayBSTROutConverter(ComSafeArrayOut(BSTR, aDst)) :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(aDstSize),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayBSTROutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeArray<BSTR> outArray(mArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < mArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync Bstr(mArray[i]).detachTo(&outArray[i]);
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync outArray.detachTo(ComSafeArrayOutArg(mDst));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<com::Utf8Str> &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<com::Utf8Str> mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync PRUint32 *mDstSize;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTR **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync SAFEARRAY **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayBSTRInConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayBSTRInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayBSTRInConverter(ComSafeArrayIn(IN_BSTR, aSrc))
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeArray<IN_BSTR> inArray(ComSafeArrayInArg(aSrc));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray.resize(inArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < inArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray[i] = inArray[i];
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayBSTRInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const std::vector<com::Utf8Str> &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<com::Utf8Str> mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass UuidOutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync UuidOutConverter() : mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync UuidOutConverter(BSTR *aDst) : mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~UuidOutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mUuid.toUtf16().detachTo(mDst);
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::Guid &uuid()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mUuid;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::Guid mUuid;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTR *mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass UuidInConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync UuidInConverter() : mSrc()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync UuidInConverter(CBSTR aSrc) : mSrc(aSrc)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~UuidInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const com::Guid &uuid()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mSrc;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const com::Guid mSrc;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayUuidOutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayUuidOutConverter() :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(NULL),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayUuidOutConverter(ComSafeArrayOut(BSTR, aDst)) :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(aDstSize),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayUuidOutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeArray<BSTR> outArray(mArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < mArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray[i].toUtf16().detachTo(&outArray[i]);
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync outArray.detachTo(ComSafeArrayOutArg(mDst));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<com::Guid> &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<com::Guid> mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync PRUint32 *mDstSize;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync BSTR **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync SAFEARRAY **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsynctemplate <class A>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ComTypeOutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ComTypeOutConverter() : mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ComTypeOutConverter(A **aDst) : mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ComTypeOutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mPtr.queryInterfaceTo(mDst);
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ComPtr<A> &ptr()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mPtr;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ComPtr<A> mPtr;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync A **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsynctemplate <class A>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ComTypeInConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ComTypeInConverter() : mSrc(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
2c1d6e606706dfdb0920a2b083e8d1073f282b47vboxsync ComTypeInConverter(A *aSrc) : mSrc(aSrc)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ComTypeInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const ComPtr<A> &ptr()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mSrc;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const ComPtr<A> mSrc;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsynctemplate <class A>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayComTypeOutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayComTypeOutConverter() :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(NULL),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayComTypeOutConverter(ComSafeArrayOut(A *, aDst)) :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(aDstSize),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayComTypeOutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeIfaceArray<A> outArray(mArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < mArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync outArray[i] = mArray[i];
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync outArray.detachTo(ComSafeArrayOutArg(mDst));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<ComPtr<A> > &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<ComPtr<A> > mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync PRUint32 *mDstSize;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync A ***mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync SAFEARRAY **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsynctemplate <class A>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayComTypeInConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayComTypeInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayComTypeInConverter(ComSafeArrayIn(A *, aSrc))
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeIfaceArray<A> inArray(ComSafeArrayInArg(aSrc));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray.resize(inArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < inArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray[i] = inArray[i];
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayComTypeInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const std::vector<ComPtr<A> > &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<ComPtr<A> > mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsynctemplate <typename A>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayOutConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayOutConverter() :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(NULL),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(NULL)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayOutConverter(ComSafeArrayOut(A, aDst)) :
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDstSize(aDstSize),
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mDst(aDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayOutConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync if (mDst)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeArray<A> outArray(mArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < mArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync outArray[i] = mArray[i];
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync outArray.detachTo(ComSafeArrayOutArg(mDst));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<A> &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<A> mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#ifdef VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync PRUint32 *mDstSize;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync A **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#else // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync SAFEARRAY **mDst;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // !VBOX_WITH_XPCOM
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsynctemplate <typename A>
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncclass ArrayInConverter
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync{
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncpublic:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ArrayInConverter(ComSafeArrayIn(A, aSrc))
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync com::SafeArray<A> inArray(ComSafeArrayInArg(aSrc));
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray.resize(inArray.size());
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync for (size_t i = 0; i < inArray.size(); i++)
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync mArray[i] = inArray[i];
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync ~ArrayInConverter()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync const std::vector<A> &array()
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync {
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync return mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync }
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsyncprivate:
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync std::vector<A> mArray;
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync};
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync#endif // ____H_WRAPPER
c0d22c23d3289cef0332f4d61ab15df48ed34979vboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */