MediumFormatImpl.h revision e475db425142b37cb088dc96daae0d4e8d13166e
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync/* $Id$ */
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync/** @file
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync *
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * VirtualBox COM class implementation
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync */
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync/*
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync * Copyright (C) 2008-2009 Oracle Corporation
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync *
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * available from http://www.virtualbox.org. This file is free software;
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * you can redistribute it and/or modify it under the terms of the GNU
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * General Public License (GPL) as published by the Free Software
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync */
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync#ifndef ____H_MEDIUMFORMAT
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync#define ____H_MEDIUMFORMAT
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync#include "VirtualBoxBase.h"
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsync#include <VBox/com/array.h>
4651430e55b9df9726347e3e3968618e540fe729vboxsync
4651430e55b9df9726347e3e3968618e540fe729vboxsync#include <list>
4651430e55b9df9726347e3e3968618e540fe729vboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsyncstruct VDBACKENDINFO;
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync/**
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * The MediumFormat class represents the backend used to store medium data
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * (IMediumFormat interface).
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync *
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * @note Instances of this class are permanently caller-referenced by Medium
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * objects (through addCaller()) so that an attempt to uninitialize or delete
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * them before all Medium objects are uninitialized will produce an endless
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync * wait!
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync */
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsyncclass ATL_NO_VTABLE MediumFormat :
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync public VirtualBoxBase,
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync VBOX_SCRIPTABLE_IMPL(IMediumFormat)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync{
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsyncpublic:
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync struct Property
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync {
e475db425142b37cb088dc96daae0d4e8d13166evboxsync Utf8Str strName;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync Utf8Str strDescription;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync DataType_T type;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync ULONG flags;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync Utf8Str strDefaultValue;
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync };
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
e475db425142b37cb088dc96daae0d4e8d13166evboxsync typedef std::list<Utf8Str> StrList;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync typedef std::list<Property> PropertyList;
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync struct Data
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync {
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync Data() : capabilities (0) {}
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const Utf8Str strId;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const Utf8Str strName;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const StrList llFileExtensions;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const uint64_t capabilities;
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const PropertyList llProperties;
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync };
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
e07acfb7f2dbb8bb40804024c79fd3139bdb3f24vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(MediumFormat, IMediumFormat)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync DECLARE_NOT_AGGREGATABLE (MediumFormat)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync BEGIN_COM_MAP(MediumFormat)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync COM_INTERFACE_ENTRY (ISupportErrorInfo)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync COM_INTERFACE_ENTRY (IMediumFormat)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync COM_INTERFACE_ENTRY (IDispatch)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync END_COM_MAP()
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync DECLARE_EMPTY_CTOR_DTOR (MediumFormat)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync HRESULT FinalConstruct();
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync void FinalRelease();
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync // public initializer/uninitializer for internal purposes only
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync HRESULT init (const VDBACKENDINFO *aVDInfo);
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync void uninit();
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync // IMediumFormat properties
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync STDMETHOD(COMGETTER(Id)) (BSTR *aId);
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync STDMETHOD(COMGETTER(Name)) (BSTR *aName);
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync STDMETHOD(COMGETTER(FileExtensions)) (ComSafeArrayOut (BSTR, aFileExtensions));
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync STDMETHOD(COMGETTER(Capabilities)) (ULONG *aCaps);
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync // IMediumFormat methods
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync STDMETHOD(DescribeProperties) (ComSafeArrayOut (BSTR, aNames),
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync ComSafeArrayOut (BSTR, aDescriptions),
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync ComSafeArrayOut (DataType_T, aTypes),
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync ComSafeArrayOut (ULONG, aFlags),
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync ComSafeArrayOut (BSTR, aDefaults));
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync // public methods only for internal purposes
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync // public methods for internal purposes only
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync // (ensure there is a caller and a read lock before calling them!)
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync /** Const, no need to lock */
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const Utf8Str& getId() const { return m.strId; }
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync /** Const, no need to lock */
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const StrList& getFileExtensions() const { return m.llFileExtensions; }
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync /** Const, no need to lock */
e475db425142b37cb088dc96daae0d4e8d13166evboxsync uint64_t getCapabilities() const { return m.capabilities; }
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync /** Const, no need to lock */
e475db425142b37cb088dc96daae0d4e8d13166evboxsync const PropertyList& getProperties() const { return m.llProperties; }
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsyncprivate:
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync Data m;
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync};
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync#endif // ____H_MEDIUMFORMAT
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync
2c4460e3cb462e743aa08229a17e49aa4f061effvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */