VirtualBox

Changeset 45491 in vbox


Ignore:
Timestamp:
Apr 11, 2013 5:55:28 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
84955
Message:

Main: Code generator for (xp)com implementations, including logging and parameter conversion, so far only used by MediumFormat.

Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/log.h

    r45370 r45491  
    44
    55/*
    6  * Copyright (C) 2006-2012 Oracle Corporation
     6 * Copyright (C) 2006-2013 Oracle Corporation
    77 *
    88 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    240240    /** Main group. */
    241241    LOG_GROUP_MAIN,
     242    /** Main group, IAdditionsFacility. */
     243    LOG_GROUP_MAIN_ADDITIONSFACILITY,
     244    /** Main group, IAdditionsStateChangedEvent. */
     245    LOG_GROUP_MAIN_ADDITIONSSTATECHANGEDEVENT,
     246    /** Main group, IAppliance. */
     247    LOG_GROUP_MAIN_APPLIANCE,
     248    /** Main group, IAudioAdapter. */
     249    LOG_GROUP_MAIN_AUDIOADAPTER,
     250    /** Main group, IBandwidthControl. */
     251    LOG_GROUP_MAIN_BANDWIDTHCONTROL,
     252    /** Main group, IBandwidthGroup. */
     253    LOG_GROUP_MAIN_BANDWIDTHGROUP,
     254    /** Main group, IBandwidthGroupChangedEvent. */
     255    LOG_GROUP_MAIN_BANDWIDTHGROUPCHANGEDEVENT,
     256    /** Main group, IBIOSSettings. */
     257    LOG_GROUP_MAIN_BIOSSETTINGS,
     258    /** Main group, ICanShowWindowEvent. */
     259    LOG_GROUP_MAIN_CANSHOWWINDOWEVENT,
     260    /** Main group, IClipboardModeChangedEvent. */
     261    LOG_GROUP_MAIN_CLIPBOARDMODECHANGEDEVENT,
     262    /** Main group, IConsole. */
     263    LOG_GROUP_MAIN_CONSOLE,
     264    /** Main group, ICPUChangedEvent. */
     265    LOG_GROUP_MAIN_CPUCHANGEDEVENT,
     266    /** Main group, ICPUExecutionCapChangedEvent. */
     267    LOG_GROUP_MAIN_CPUEXECUTIONCAPCHANGEDEVENT,
     268    /** Main group, IDHCPServer. */
     269    LOG_GROUP_MAIN_DHCPSERVER,
     270    /** Main group, IDirectory. */
     271    LOG_GROUP_MAIN_DIRECTORY,
     272    /** Main group, IDisplay. */
     273    LOG_GROUP_MAIN_DISPLAY,
     274    /** Main group, IDragAndDropModeChangedEvent. */
     275    LOG_GROUP_MAIN_DRAGANDDROPMODECHANGEDEVENT,
     276    /** Main group, IEvent. */
     277    LOG_GROUP_MAIN_EVENT,
     278    /** Main group, IEventListener. */
     279    LOG_GROUP_MAIN_EVENTLISTENER,
     280    /** Main group, IEventSource. */
     281    LOG_GROUP_MAIN_EVENTSOURCE,
     282    /** Main group, IEventSourceChangedEvent. */
     283    LOG_GROUP_MAIN_EVENTSOURCECHANGEDEVENT,
     284    /** Main group, IExtPack. */
     285    LOG_GROUP_MAIN_EXTPACK,
     286    /** Main group, IExtPackBase. */
     287    LOG_GROUP_MAIN_EXTPACKBASE,
     288    /** Main group, IExtPackFile. */
     289    LOG_GROUP_MAIN_EXTPACKFILE,
     290    /** Main group, IExtPackManager. */
     291    LOG_GROUP_MAIN_EXTPACKMANAGER,
     292    /** Main group, IExtPackPlugIn. */
     293    LOG_GROUP_MAIN_EXTPACKPLUGIN,
     294    /** Main group, IExtraDataCanChangeEvent. */
     295    LOG_GROUP_MAIN_EXTRADATACANCHANGEEVENT,
     296    /** Main group, IExtraDataChangedEvent. */
     297    LOG_GROUP_MAIN_EXTRADATACHANGEDEVENT,
     298    /** Main group, IFile. */
     299    LOG_GROUP_MAIN_FILE,
     300    /** Main group, IFramebuffer. */
     301    LOG_GROUP_MAIN_FRAMEBUFFER,
     302    /** Main group, IFramebufferOverlay. */
     303    LOG_GROUP_MAIN_FRAMEBUFFEROVERLAY,
     304    /** Main group, IFsObjInfo. */
     305    LOG_GROUP_MAIN_FSOBJINFO,
     306    /** Main group, IGuest. */
     307    LOG_GROUP_MAIN_GUEST,
     308    /** Main group, IGuestDirectory. */
     309    LOG_GROUP_MAIN_GUESTDIRECTORY,
     310    /** Main group, IGuestErrorInfo. */
     311    LOG_GROUP_MAIN_GUESTERRORINFO,
     312    /** Main group, IGuestFile. */
     313    LOG_GROUP_MAIN_GUESTFILE,
     314    /** Main group, IGuestFileEvent. */
     315    LOG_GROUP_MAIN_GUESTFILEEVENT,
     316    /** Main group, IGuestFileIOEvent. */
     317    LOG_GROUP_MAIN_GUESTFILEIOEVENT,
     318    /** Main group, IGuestFileOffsetChangedEvent. */
     319    LOG_GROUP_MAIN_GUESTFILEOFFSETCHANGEDEVENT,
     320    /** Main group, IGuestFileReadEvent. */
     321    LOG_GROUP_MAIN_GUESTFILEREADEVENT,
     322    /** Main group, IGuestFileRegisteredEvent. */
     323    LOG_GROUP_MAIN_GUESTFILEREGISTEREDEVENT,
     324    /** Main group, IGuestFileStateChangedEvent. */
     325    LOG_GROUP_MAIN_GUESTFILESTATECHANGEDEVENT,
     326    /** Main group, IGuestFileWriteEvent. */
     327    LOG_GROUP_MAIN_GUESTFILEWRITEEVENT,
     328    /** Main group, IGuestFsObjInfo. */
     329    LOG_GROUP_MAIN_GUESTFSOBJINFO,
     330    /** Main group, IGuestKeyboardEvent. */
     331    LOG_GROUP_MAIN_GUESTKEYBOARDEVENT,
     332    /** Main group, IGuestMonitorChangedEvent. */
     333    LOG_GROUP_MAIN_GUESTMONITORCHANGEDEVENT,
     334    /** Main group, IGuestMouseEvent. */
     335    LOG_GROUP_MAIN_GUESTMOUSEEVENT,
     336    /** Main group, IGuestOSType. */
     337    LOG_GROUP_MAIN_GUESTOSTYPE,
     338    /** Main group, IGuestProcess. */
     339    LOG_GROUP_MAIN_GUESTPROCESS,
     340    /** Main group, IGuestProcessEvent. */
     341    LOG_GROUP_MAIN_GUESTPROCESSEVENT,
     342    /** Main group, IGuestProcessInputNotifyEvent. */
     343    LOG_GROUP_MAIN_GUESTPROCESSINPUTNOTIFYEVENT,
     344    /** Main group, IGuestProcessIOEvent. */
     345    LOG_GROUP_MAIN_GUESTPROCESSIOEVENT,
     346    /** Main group, IGuestProcessOutputEvent. */
     347    LOG_GROUP_MAIN_GUESTPROCESSOUTPUTEVENT,
     348    /** Main group, IGuestProcessRegisteredEvent. */
     349    LOG_GROUP_MAIN_GUESTPROCESSREGISTEREDEVENT,
     350    /** Main group, IGuestProcessStateChangedEvent. */
     351    LOG_GROUP_MAIN_GUESTPROCESSSTATECHANGEDEVENT,
     352    /** Main group, IGuestPropertyChangedEvent. */
     353    LOG_GROUP_MAIN_GUESTPROPERTYCHANGEDEVENT,
     354    /** Main group, IGuestSession. */
     355    LOG_GROUP_MAIN_GUESTSESSION,
     356    /** Main group, IGuestSessionEvent. */
     357    LOG_GROUP_MAIN_GUESTSESSIONEVENT,
     358    /** Main group, IGuestSessionRegisteredEvent. */
     359    LOG_GROUP_MAIN_GUESTSESSIONREGISTEREDEVENT,
     360    /** Main group, IGuestSessionStateChangedEvent. */
     361    LOG_GROUP_MAIN_GUESTSESSIONSTATECHANGEDEVENT,
     362    /** Main group, IHost. */
     363    LOG_GROUP_MAIN_HOST,
     364    /** Main group, IHostNetworkInterface. */
     365    LOG_GROUP_MAIN_HOSTNETWORKINTERFACE,
     366    /** Main group, IHostPCIDevicePlugEvent. */
     367    LOG_GROUP_MAIN_HOSTPCIDEVICEPLUGEVENT,
     368    /** Main group, IHostUSBDevice. */
     369    LOG_GROUP_MAIN_HOSTUSBDEVICE,
     370    /** Main group, IHostUSBDeviceFilter. */
     371    LOG_GROUP_MAIN_HOSTUSBDEVICEFILTER,
     372    /** Main group, IInternalMachineControl. */
     373    LOG_GROUP_MAIN_INTERNALMACHINECONTROL,
     374    /** Main group, IInternalSessionControl. */
     375    LOG_GROUP_MAIN_INTERNALSESSIONCONTROL,
     376    /** Main group, IKeyboard. */
     377    LOG_GROUP_MAIN_KEYBOARD,
     378    /** Main group, IKeyboardLedsChangedEvent. */
     379    LOG_GROUP_MAIN_KEYBOARDLEDSCHANGEDEVENT,
     380    /** Main group, IMachine. */
     381    LOG_GROUP_MAIN_MACHINE,
     382    /** Main group, IMachineDataChangedEvent. */
     383    LOG_GROUP_MAIN_MACHINEDATACHANGEDEVENT,
     384    /** Main group, IMachineDebugger. */
     385    LOG_GROUP_MAIN_MACHINEDEBUGGER,
     386    /** Main group, IMachineEvent. */
     387    LOG_GROUP_MAIN_MACHINEEVENT,
     388    /** Main group, IMachineRegisteredEvent. */
     389    LOG_GROUP_MAIN_MACHINEREGISTEREDEVENT,
     390    /** Main group, IMachineStateChangedEvent. */
     391    LOG_GROUP_MAIN_MACHINESTATECHANGEDEVENT,
     392    /** Main group, IMedium. */
     393    LOG_GROUP_MAIN_MEDIUM,
     394    /** Main group, IMediumAttachment. */
     395    LOG_GROUP_MAIN_MEDIUMATTACHMENT,
     396    /** Main group, IMediumChangedEvent. */
     397    LOG_GROUP_MAIN_MEDIUMCHANGEDEVENT,
     398    /** Main group, IMediumFormat. */
     399    LOG_GROUP_MAIN_MEDIUMFORMAT,
     400    /** Main group, IMediumRegisteredEvent. */
     401    LOG_GROUP_MAIN_MEDIUMREGISTEREDEVENT,
     402    /** Main group, IMouse. */
     403    LOG_GROUP_MAIN_MOUSE,
     404    /** Main group, IMouseCapabilityChangedEvent. */
     405    LOG_GROUP_MAIN_MOUSECAPABILITYCHANGEDEVENT,
     406    /** Main group, IMousePointerShapeChangedEvent. */
     407    LOG_GROUP_MAIN_MOUSEPOINTERSHAPECHANGEDEVENT,
     408    /** Main group, INATEngine. */
     409    LOG_GROUP_MAIN_NATENGINE,
     410    /** Main group, INATNetwork. */
     411    LOG_GROUP_MAIN_NATNETWORK,
     412    /** Main group, INATNetworkAlterEvent. */
     413    LOG_GROUP_MAIN_NATNETWORKALTEREVENT,
     414    /** Main group, INATNetworkChangedEvent. */
     415    LOG_GROUP_MAIN_NATNETWORKCHANGEDEVENT,
     416    /** Main group, INATNetworkCreationDeletionEvent. */
     417    LOG_GROUP_MAIN_NATNETWORKCREATIONDELETIONEVENT,
     418    /** Main group, INATNetworkPortForwardEvent. */
     419    LOG_GROUP_MAIN_NATNETWORKPORTFORWARDEVENT,
     420    /** Main group, INATNetworkSettingEvent. */
     421    LOG_GROUP_MAIN_NATNETWORKSETTINGEVENT,
     422    /** Main group, INATNetworkStartStopEvent. */
     423    LOG_GROUP_MAIN_NATNETWORKSTARTSTOPEVENT,
     424    /** Main group, INATRedirectEvent. */
     425    LOG_GROUP_MAIN_NATREDIRECTEVENT,
     426    /** Main group, INetworkAdapter. */
     427    LOG_GROUP_MAIN_NETWORKADAPTER,
     428    /** Main group, INetworkAdapterChangedEvent. */
     429    LOG_GROUP_MAIN_NETWORKADAPTERCHANGEDEVENT,
     430    /** Main group, IParallelPort. */
     431    LOG_GROUP_MAIN_PARALLELPORT,
     432    /** Main group, IParallelPortChangedEvent. */
     433    LOG_GROUP_MAIN_PARALLELPORTCHANGEDEVENT,
     434    /** Main group, IPCIAddress. */
     435    LOG_GROUP_MAIN_PCIADDRESS,
     436    /** Main group, IPCIDeviceAttachment. */
     437    LOG_GROUP_MAIN_PCIDEVICEATTACHMENT,
     438    /** Main group, IPerformanceCollector. */
     439    LOG_GROUP_MAIN_PERFORMANCECOLLECTOR,
     440    /** Main group, IPerformanceMetric. */
     441    LOG_GROUP_MAIN_PERFORMANCEMETRIC,
     442    /** Main group, IProcess. */
     443    LOG_GROUP_MAIN_PROCESS,
     444    /** Main group, IProgress. */
     445    LOG_GROUP_MAIN_PROGRESS,
     446    /** Main group, IReusableEvent. */
     447    LOG_GROUP_MAIN_REUSABLEEVENT,
     448    /** Main group, IRuntimeErrorEvent. */
     449    LOG_GROUP_MAIN_RUNTIMEERROREVENT,
     450    /** Main group, ISerialPort. */
     451    LOG_GROUP_MAIN_SERIALPORT,
     452    /** Main group, ISerialPortChangedEvent. */
     453    LOG_GROUP_MAIN_SERIALPORTCHANGEDEVENT,
     454    /** Main group, ISession. */
     455    LOG_GROUP_MAIN_SESSION,
     456    /** Main group, ISessionStateChangedEvent. */
     457    LOG_GROUP_MAIN_SESSIONSTATECHANGEDEVENT,
     458    /** Main group, ISharedFolder. */
     459    LOG_GROUP_MAIN_SHAREDFOLDER,
     460    /** Main group, ISharedFolderChangedEvent. */
     461    LOG_GROUP_MAIN_SHAREDFOLDERCHANGEDEVENT,
     462    /** Main group, IShowWindowEvent. */
     463    LOG_GROUP_MAIN_SHOWWINDOWEVENT,
     464    /** Main group, ISnapshot. */
     465    LOG_GROUP_MAIN_SNAPSHOT,
     466    /** Main group, ISnapshotChangedEvent. */
     467    LOG_GROUP_MAIN_SNAPSHOTCHANGEDEVENT,
     468    /** Main group, ISnapshotDeletedEvent. */
     469    LOG_GROUP_MAIN_SNAPSHOTDELETEDEVENT,
     470    /** Main group, ISnapshotEvent. */
     471    LOG_GROUP_MAIN_SNAPSHOTEVENT,
     472    /** Main group, ISnapshotTakenEvent. */
     473    LOG_GROUP_MAIN_SNAPSHOTTAKENEVENT,
     474    /** Main group, IStateChangedEvent. */
     475    LOG_GROUP_MAIN_STATECHANGEDEVENT,
     476    /** Main group, IStorageController. */
     477    LOG_GROUP_MAIN_STORAGECONTROLLER,
     478    /** Main group, IStorageControllerChangedEvent. */
     479    LOG_GROUP_MAIN_STORAGECONTROLLERCHANGEDEVENT,
     480    /** Main group, IStorageDeviceChangedEvent. */
     481    LOG_GROUP_MAIN_STORAGEDEVICECHANGEDEVENT,
     482    /** Main group, ISystemProperties. */
     483    LOG_GROUP_MAIN_SYSTEMPROPERTIES,
     484    /** Main group, IUSBController. */
     485    LOG_GROUP_MAIN_USBCONTROLLER,
     486    /** Main group, IUSBControllerChangedEvent. */
     487    LOG_GROUP_MAIN_USBCONTROLLERCHANGEDEVENT,
     488    /** Main group, IUSBDevice. */
     489    LOG_GROUP_MAIN_USBDEVICE,
     490    /** Main group, IUSBDeviceFilter. */
     491    LOG_GROUP_MAIN_USBDEVICEFILTER,
     492    /** Main group, IUSBDeviceStateChangedEvent. */
     493    LOG_GROUP_MAIN_USBDEVICESTATECHANGEDEVENT,
     494    /** Main group, IVBoxSVCAvailabilityChangedEvent. */
     495    LOG_GROUP_MAIN_VBOXSVCAVAILABILITYCHANGEDEVENT,
     496    /** Main group, IVetoEvent. */
     497    LOG_GROUP_MAIN_VETOEVENT,
     498    /** Main group, IVFSExplorer. */
     499    LOG_GROUP_MAIN_VFSEXPLORER,
     500    /** Main group, IVirtualBox. */
     501    LOG_GROUP_MAIN_VIRTUALBOX,
     502    /** Main group, IVirtualBoxClient. */
     503    LOG_GROUP_MAIN_VIRTUALBOXCLIENT,
     504    /** Main group, IVirtualSystemDescription. */
     505    LOG_GROUP_MAIN_VIRTUALSYSTEMDESCRIPTION,
     506    /** Main group, IVRDEServer. */
     507    LOG_GROUP_MAIN_VRDESERVER,
     508    /** Main group, IVRDEServerChangedEvent. */
     509    LOG_GROUP_MAIN_VRDESERVERCHANGEDEVENT,
     510    /** Main group, IVRDEServerInfo. */
     511    LOG_GROUP_MAIN_VRDESERVERINFO,
     512    /** Main group, IVRDEServerInfoChangedEvent. */
     513    LOG_GROUP_MAIN_VRDESERVERINFOCHANGEDEVENT,
    242514    /** Misc. group intended for external use only. */
    243515    LOG_GROUP_MISC,
  • trunk/src/VBox/Main/Makefile.kmk

    r45415 r45491  
    162162docs:                $(PATH_TARGET)/docs.Main
    163163endif
     164
     165
     166#
     167# Generate library with API class wrappers from the XIDL file.
     168#
     169LIBRARIES += VBoxAPIWrap
     170VBoxAPIWrap_TEMPLATE        = VBOXMAINLIB
     171VBoxAPIWrap_SOURCES         = $(VBoxAPIWrap_GENERATEDCPP)
     172VBoxAPIWrap_GENERATEDCPP    = $(filter %.cpp,$(VBoxAPIWrap_GENERATEDSOURCES))
     173VBoxAPIWrap_GENERATEDSOURCES = $(addprefix $(VBoxAPIWrap_0_OUTDIR)/,$(VBoxAPIWrap_VBOX_APIWRAPPERFILES))
     174VBoxAPIWrap_RAWSRC          = \
     175        $(VBoxAPIWrap_0_OUTDIR)/apiwrappers
     176VBoxAPIWrap_XSLT            = \
     177        $(VBOX_PATH_MAIN_SRC)/idl/apiwrap-server.xsl
     178VBoxAPIWrap_DEFS.win.x86 += _WIN32_WINNT=0x0500
     179VBoxAPIWrap_DEFS.win.amd64 += _WIN32_WINNT=0x0510
     180VBoxAPIWrap_INCS           += \
     181        include
     182VBoxAPIWrap_CLEAN           = \
     183        $(wildcard $(VBoxAPIWrap_0_OUTDIR)/*.cpp) \
     184        $(wildcard $(VBoxAPIWrap_0_OUTDIR)/*.h) \
     185        $(VBoxAPIWrap_RAWSRC)
     186VBoxAPIWrap_KMK = $(PATH_OUT)/vboxapiwrap.kmk
     187include $(VBoxAPIWrap_KMK)
    164188
    165189
     
    256280VBoxSVC_CXXFLAGS = $(filter-out -Wno-unused,$(TEMPLATE_VBOXMAINEXE_CXXFLAGS))
    257281
     282.PRECIOUS: C:/projects/vbox/out/win.x86/debug/obj/VBoxSVC/VBoxSVC.rsp
     283
    258284VBoxSVC_INCS = \
    259285        include \
    260286        $(VBoxSVC_0_OUTDIR) \
    261287        $(dir $(VBOX_XML_SCHEMADEFS_H)) \
     288        $(VBoxAPIWrap_0_OUTDIR) \
    262289        .
    263290VBoxSVC_INCS.win = \
     
    269296
    270297VBoxSVC_LIBS += \
     298        $(PATH_STAGE_LIB)/VBoxAPIWrap$(VBOX_SUFF_LIB) \
    271299        $(PATH_STAGE_LIB)/SSMStandalone$(VBOX_SUFF_LIB) \
    272300        $(LIB_DDU)
     
    547575        include \
    548576        $(VBoxC_0_OUTDIR) \
     577        $(VBoxAPIWrap_0_OUTDIR) \
    549578        $(dir $(VBOX_XML_SCHEMADEFS_H))
    550579VBoxC_INCS.win      = \
     
    866895                | $(VBOX_JMSCOM_GEN)/java/
    867896        $(call MSG_L1,Generating Java MSCOM glue files from XIDL)
    868         $(QUIET)$(RM) -f $(wildcard $(VBOX_JMSCOM_GEN)/java/*.java)
     897        $(QUIET)$(RM) -f $(VBOX_JMSCOM_GEN)/java/*.java
    869898        $(QUIET)$(VBOX_XSLTPROC) \
    870899              --stringparam G_vboxApiSuffix $(VBOX_API_SUFFIX) \
     
    900929        $(VBOX_PATH_MAIN_SRC)/glue/tests/Makefile=>Makefile
    901930
     931# moved those rules to the end so that VBoxAPIWrap_0_OUTDIR can be expanded without $$ trickery
     932$(VBoxAPIWrap_RAWSRC) \
     933+| $(VBoxAPIWrap_GENERATEDSOURCES): \
     934                $(VBOX_XIDL_FILE) \
     935                $(VBoxAPIWrap_XSLT) \
     936                $(VBOX_FILESPLIT) \
     937                | $$(dir $$@)
     938        $(call MSG_L1,Generating C++ Server API wrapper files from XIDL)
     939        $(QUIET)$(RM) -f $(filter-out $(VBoxAPIWrap_GENERATEDSOURCES),$(wildcard $(VBoxAPIWrap_0_OUTDIR)/*.cpp) $(wildcard $(VBoxAPIWrap_0_OUTDIR)/*.h))
     940        $(QUIET)$(VBOX_XSLTPROC) --stringparam filelistonly "" -o $@ $(VBoxAPIWrap_XSLT) $<
     941        $(QUIET)$(VBOX_FILESPLIT) $@ $(VBoxAPIWrap_0_OUTDIR)
     942
     943$(VBoxAPIWrap_KMK).ts +| $(VBoxAPIWrap_KMK): $(VBOX_XIDL_FILE) $(VBoxAPIWrap_XSLT)
     944        $(call MSG_GENERATE,,$(VBoxAPIWrap_KMK))
     945        $(QUIET)$(RM) -f $@
     946        $(QUIET)$(MKDIR) -p $(@D)
     947        $(QUIET)$(VBOX_XSLTPROC) --stringparam filelistonly VBoxAPIWrap_VBOX_APIWRAPPERFILES -o $@ $(VBoxAPIWrap_XSLT) $<
     948        $(QUIET)$(CP) --changed -fv $@ $(VBoxAPIWrap_KMK)
     949
    902950updatenls::
    903951        $(VBOX_LUPDATE) $(VBoxSVC_SOURCES) $(VBoxSVC_VBOX_HEADERS) -ts $(VBoxSVC_VBOX_TRANSLATIONS)
  • trunk/src/VBox/Main/include/MediumFormatImpl.h

    r44528 r45491  
    33/** @file
    44 *
    5  * VirtualBox COM class implementation
     5 * MediumFormat COM class implementation
    66 */
    77
     
    1818 */
    1919
    20 #ifndef ____H_MEDIUMFORMAT
    21 #define ____H_MEDIUMFORMAT
     20#ifndef MEDIUMFORMAT_IMPL_H_
     21#define MEDIUMFORMAT_IMPL_H_
    2222
    23 #include "VirtualBoxBase.h"
     23#include "MediumFormatWrap.h"
    2424
    25 #include <VBox/com/array.h>
    26 
    27 #include <list>
    2825
    2926struct VDBACKENDINFO;
     
    3936 */
    4037class ATL_NO_VTABLE MediumFormat :
    41     public VirtualBoxBase,
    42     VBOX_SCRIPTABLE_IMPL(IMediumFormat)
     38    public MediumFormatWrap
    4339{
    4440public:
     
    5349    };
    5450
    55     typedef std::list<Utf8Str>      StrList;
    56     typedef std::list<DeviceType_T> DeviceTypeList;
    57     typedef std::list<Property>     PropertyList;
    58 
    59     struct Data
    60     {
    61         Data() : capabilities((MediumFormatCapabilities_T)0) {}
    62 
    63         const Utf8Str        strId;
    64         const Utf8Str        strName;
    65         const StrList        llFileExtensions;
    66         const DeviceTypeList llDeviceTypes;
    67         const MediumFormatCapabilities_T capabilities;
    68         const PropertyList   llProperties;
    69     };
    70 
    71     VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(MediumFormat, IMediumFormat)
    72 
    73     DECLARE_NOT_AGGREGATABLE(MediumFormat)
    74 
    75     DECLARE_PROTECT_FINAL_CONSTRUCT()
    76 
    77     BEGIN_COM_MAP(MediumFormat)
    78         VBOX_DEFAULT_INTERFACE_ENTRIES(IMediumFormat)
    79     END_COM_MAP()
     51    typedef std::vector<Property> PropertyArray;
     52    typedef std::vector<com::Utf8Str> StrArray;
    8053
    8154    DECLARE_EMPTY_CTOR_DTOR(MediumFormat)
     
    8861    void uninit();
    8962
    90     // IMediumFormat properties
    91     STDMETHOD(COMGETTER(Id))(BSTR *aId);
    92     STDMETHOD(COMGETTER(Name))(BSTR *aName);
    93     STDMETHOD(COMGETTER(Capabilities))(ComSafeArrayOut(MediumFormatCapabilities_T, aCaps));
    94 
    95     // IMediumFormat methods
    96     STDMETHOD(DescribeFileExtensions)(ComSafeArrayOut(BSTR, aFileExtensions),
    97                                       ComSafeArrayOut(DeviceType_T, aDeviceTypes));
    98     STDMETHOD(DescribeProperties)(ComSafeArrayOut(BSTR, aNames),
    99                                   ComSafeArrayOut(BSTR, aDescriptions),
    100                                   ComSafeArrayOut(DataType_T, aTypes),
    101                                   ComSafeArrayOut(ULONG, aFlags),
    102                                   ComSafeArrayOut(BSTR, aDefaults));
    103 
    104     // public methods only for internal purposes
    105 
    10663    // public methods for internal purposes only
    10764    // (ensure there is a caller and a read lock before calling them!)
    10865
    10966    /** Const, no need to lock */
    110     const Utf8Str& getId() const { return m.strId; }
     67    const Utf8Str &i_getId() const { return m.strId; }
    11168    /** Const, no need to lock */
    112     const StrList& getFileExtensions() const { return m.llFileExtensions; }
     69    const StrArray &i_getFileExtensions() const { return m.maFileExtensions; }
    11370    /** Const, no need to lock */
    114     MediumFormatCapabilities_T getCapabilities() const { return m.capabilities; }
     71    MediumFormatCapabilities_T i_getCapabilities() const { return m.capabilities; }
    11572    /** Const, no need to lock */
    116     const PropertyList& getProperties() const { return m.llProperties; }
     73    const PropertyArray &i_getProperties() const { return m.maProperties; }
    11774
    11875private:
     76
     77    // wrapped IMediumFormat properties
     78    HRESULT getId(com::Utf8Str &aId);
     79    HRESULT getName(com::Utf8Str &aName);
     80    HRESULT getCapabilities(std::vector<MediumFormatCapabilities_T> &aCapabilities);
     81
     82    // wrapped IMediumFormat methods
     83    HRESULT describeFileExtensions(std::vector<com::Utf8Str> &aExtensions,
     84                                   std::vector<DeviceType_T> &aTypes);
     85    HRESULT describeProperties(std::vector<com::Utf8Str> &aNames,
     86                               std::vector<com::Utf8Str> &aDescriptions,
     87                               std::vector<DataType_T> &aTypes,
     88                               std::vector<ULONG> &aFlags,
     89                               std::vector<com::Utf8Str> &aDefaults);
     90
     91    // types
     92    typedef std::vector<DeviceType_T> DeviceTypeArray;
     93
     94    // data
     95    struct Data
     96    {
     97        Data() : capabilities((MediumFormatCapabilities_T)0) {}
     98
     99        const Utf8Str        strId;
     100        const Utf8Str        strName;
     101        const StrArray       maFileExtensions;
     102        const DeviceTypeArray maDeviceTypes;
     103        const MediumFormatCapabilities_T capabilities;
     104        const PropertyArray  maProperties;
     105    };
    119106
    120107    Data m;
    121108};
    122109
    123 #endif // ____H_MEDIUMFORMAT
     110#endif // MEDIUMFORMAT_IMPL_H_
    124111
    125112/* vi: set tabstop=4 shiftwidth=4 expandtab: */
  • trunk/src/VBox/Main/src-server/MediumFormatImpl.cpp

    r44528 r45491  
    22/** @file
    33 *
    4  * VirtualBox COM class implementation
     4 * MediumFormat COM class implementation
    55 */
    66
     
    7676            DeviceType_T devType;
    7777
    78             unconst(m.llFileExtensions).push_back(papExtension->pszExtension);
     78            unconst(m.maFileExtensions).push_back(papExtension->pszExtension);
    7979
    8080            switch(papExtension->enmType)
     
    9494            }
    9595
    96             unconst(m.llDeviceTypes).push_back(devType);
     96            unconst(m.maDeviceTypes).push_back(devType);
    9797            ++papExtension;
    9898        }
     
    157157                                    flags,
    158158                                    defaultValue };
    159             unconst(m.llProperties).push_back(prop);
     159            unconst(m.maProperties).push_back(prop);
    160160            ++pa;
    161161        }
     
    181181        return;
    182182
    183     unconst(m.llProperties).clear();
    184     unconst(m.llFileExtensions).clear();
    185     unconst(m.llDeviceTypes).clear();
     183    unconst(m.maProperties).clear();
     184    unconst(m.maFileExtensions).clear();
     185    unconst(m.maDeviceTypes).clear();
    186186    unconst(m.capabilities) = (MediumFormatCapabilities_T)0;
    187187    unconst(m.strName).setNull();
     
    192192/////////////////////////////////////////////////////////////////////////////
    193193
    194 STDMETHODIMP MediumFormat::COMGETTER(Id)(BSTR *aId)
    195 {
    196     CheckComArgOutPointerValid(aId);
    197 
    198     AutoCaller autoCaller(this);
    199     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    200 
    201     /* this is const, no need to lock */
    202     m.strId.cloneTo(aId);
    203 
    204     return S_OK;
    205 }
    206 
    207 STDMETHODIMP MediumFormat::COMGETTER(Name)(BSTR *aName)
    208 {
    209     CheckComArgOutPointerValid(aName);
    210 
    211     AutoCaller autoCaller(this);
    212     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    213 
    214     /* this is const, no need to lock */
    215     m.strName.cloneTo(aName);
    216 
    217     return S_OK;
    218 }
    219 
    220 STDMETHODIMP MediumFormat::COMGETTER(Capabilities)(ComSafeArrayOut(MediumFormatCapabilities_T, aCaps))
    221 {
    222     CheckComArgOutSafeArrayPointerValid(aCaps);
    223 
    224     AutoCaller autoCaller(this);
    225     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    226 
    227     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
    228 
    229     SafeArray<MediumFormatCapabilities_T> capabilities(sizeof(MediumFormatCapabilities_T)*8);
    230 
    231     for (ULONG i = 0; i < capabilities.size(); ++i)
    232     {
    233         ULONG temp = m.capabilities;
    234         temp &= 1<<i;
    235         capabilities [i] = (MediumFormatCapabilities_T)temp;
    236     }
    237 
    238     capabilities.detachTo(ComSafeArrayOutArg(aCaps));
    239 
    240     return S_OK;
    241 }
    242 
    243 STDMETHODIMP MediumFormat::DescribeFileExtensions(ComSafeArrayOut(BSTR, aFileExtensions),
    244                                                   ComSafeArrayOut(DeviceType_T, aDeviceTypes))
    245 {
    246     CheckComArgOutSafeArrayPointerValid(aFileExtensions);
    247 
    248     AutoCaller autoCaller(this);
    249     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    250 
    251     /* this is const, no need to lock */
    252     com::SafeArray<BSTR> fileExtentions(m.llFileExtensions.size());
    253     int i = 0;
    254     for (StrList::const_iterator it = m.llFileExtensions.begin();
    255          it != m.llFileExtensions.end();
    256          ++it, ++i)
    257         (*it).cloneTo(&fileExtentions[i]);
    258     fileExtentions.detachTo(ComSafeArrayOutArg(aFileExtensions));
    259 
    260     com::SafeArray<DeviceType_T> deviceTypes(m.llDeviceTypes.size());
    261     i = 0;
    262     for (DeviceTypeList::const_iterator it = m.llDeviceTypes.begin();
    263          it != m.llDeviceTypes.end();
    264          ++it, ++i)
    265         deviceTypes[i] = (*it);
    266     deviceTypes.detachTo(ComSafeArrayOutArg(aDeviceTypes));
    267 
    268     return S_OK;
    269 }
    270 
    271 STDMETHODIMP MediumFormat::DescribeProperties(ComSafeArrayOut(BSTR, aNames),
    272                                               ComSafeArrayOut(BSTR, aDescriptions),
    273                                               ComSafeArrayOut(DataType_T, aTypes),
    274                                               ComSafeArrayOut(ULONG, aFlags),
    275                                               ComSafeArrayOut(BSTR, aDefaults))
    276 {
    277     CheckComArgOutSafeArrayPointerValid(aNames);
    278     CheckComArgOutSafeArrayPointerValid(aDescriptions);
    279     CheckComArgOutSafeArrayPointerValid(aTypes);
    280     CheckComArgOutSafeArrayPointerValid(aFlags);
    281     CheckComArgOutSafeArrayPointerValid(aDefaults);
    282 
    283     AutoCaller autoCaller(this);
    284     if (FAILED(autoCaller.rc())) return autoCaller.rc();
    285 
    286     /* this is const, no need to lock */
    287     size_t c = m.llProperties.size();
    288     com::SafeArray<BSTR>        propertyNames(c);
    289     com::SafeArray<BSTR>        propertyDescriptions(c);
    290     com::SafeArray<DataType_T>  propertyTypes(c);
    291     com::SafeArray<ULONG>       propertyFlags(c);
    292     com::SafeArray<BSTR>        propertyDefaults(c);
    293 
    294     int i = 0;
    295     for (PropertyList::const_iterator it = m.llProperties.begin();
    296          it != m.llProperties.end();
    297          ++it, ++i)
    298     {
    299         const Property &prop = (*it);
    300         prop.strName.cloneTo(&propertyNames[i]);
    301         prop.strDescription.cloneTo(&propertyDescriptions[i]);
    302         propertyTypes[i] = prop.type;
    303         propertyFlags[i] = prop.flags;
    304         prop.strDefaultValue.cloneTo(&propertyDefaults[i]);
    305     }
    306 
    307     propertyNames.detachTo(ComSafeArrayOutArg(aNames));
    308     propertyDescriptions.detachTo(ComSafeArrayOutArg(aDescriptions));
    309     propertyTypes.detachTo(ComSafeArrayOutArg(aTypes));
    310     propertyFlags.detachTo(ComSafeArrayOutArg(aFlags));
    311     propertyDefaults.detachTo(ComSafeArrayOutArg(aDefaults));
     194HRESULT MediumFormat::getId(com::Utf8Str &aId)
     195{
     196    /* this is const, no need to lock */
     197    aId = m.strId;
     198
     199    return S_OK;
     200}
     201
     202HRESULT MediumFormat::getName(com::Utf8Str &aName)
     203{
     204    /* this is const, no need to lock */
     205    aName = m.strName;
     206
     207    return S_OK;
     208}
     209
     210HRESULT MediumFormat::getCapabilities(std::vector<MediumFormatCapabilities_T> &aCapabilities)
     211{
     212    /* m.capabilities is const, no need to lock */
     213
     214    aCapabilities.resize(sizeof(MediumFormatCapabilities_T) * 8);
     215    size_t cCapabilities = 0;
     216    for (size_t i = 0; i < aCapabilities.size(); i++)
     217    {
     218        uint64_t tmp = m.capabilities;
     219        tmp &= 1ULL << i;
     220        if (tmp)
     221            aCapabilities[cCapabilities] = (MediumFormatCapabilities_T)tmp;
     222    }
     223    aCapabilities.resize(RT_MIN(cCapabilities, 1));
    312224
    313225    return S_OK;
     
    317229/////////////////////////////////////////////////////////////////////////////
    318230
     231HRESULT MediumFormat::describeFileExtensions(std::vector<com::Utf8Str> &aExtensions,
     232                                             std::vector<DeviceType_T> &aTypes)
     233{
     234    /* this is const, no need to lock */
     235    aExtensions = m.maFileExtensions;
     236    aTypes = m.maDeviceTypes;
     237
     238    return S_OK;
     239}
     240
     241HRESULT MediumFormat::describeProperties(std::vector<com::Utf8Str> &aNames,
     242                                         std::vector<com::Utf8Str> &aDescriptions,
     243                                         std::vector<DataType_T> &aTypes,
     244                                         std::vector<ULONG> &aFlags,
     245                                         std::vector<com::Utf8Str> &aDefaults)
     246{
     247    /* this is const, no need to lock */
     248    size_t c = m.maProperties.size();
     249    aNames.resize(c);
     250    aDescriptions.resize(c);
     251    aTypes.resize(c);
     252    aFlags.resize(c);
     253    aDefaults.resize(c);
     254    for (size_t i = 0; i < c; i++)
     255    {
     256        const Property &prop = m.maProperties[i];
     257        aNames[i] = prop.strName;
     258        aDescriptions[i] = prop.strDescription;
     259        aTypes[i] = prop.type;
     260        aFlags[i] = prop.flags;
     261        aDefaults[i] = prop.strDefaultValue;
     262    }
     263
     264    return S_OK;
     265}
     266
    319267// public methods only for internal purposes
    320268/////////////////////////////////////////////////////////////////////////////
  • trunk/src/VBox/Main/src-server/MediumImpl.cpp

    r45239 r45491  
    959959    if (FAILED(rc)) return rc;
    960960
    961     if (!(m->formatObj->getCapabilities() & (   MediumFormatCapabilities_CreateFixed
     961    if (!(m->formatObj->i_getCapabilities() & (   MediumFormatCapabilities_CreateFixed
    962962                                              | MediumFormatCapabilities_CreateDynamic))
    963963       )
     
    12401240
    12411241    Utf8Str strFull;
    1242     if (m->formatObj->getCapabilities() & MediumFormatCapabilities_File)
     1242    if (m->formatObj->i_getCapabilities() & MediumFormatCapabilities_File)
    12431243    {
    12441244        // compose full path of the medium, if it's not fully qualified...
     
    25172517
    25182518        if (    !(mediumVariantFlags & MediumVariant_Fixed)
    2519             &&  !(m->formatObj->getCapabilities() & MediumFormatCapabilities_CreateDynamic))
     2519            &&  !(m->formatObj->i_getCapabilities() & MediumFormatCapabilities_CreateDynamic))
    25202520            throw setError(VBOX_E_NOT_SUPPORTED,
    25212521                           tr("Medium format '%s' does not support dynamic storage creation"),
     
    25232523
    25242524        if (    (mediumVariantFlags & MediumVariant_Fixed)
    2525             &&  !(m->formatObj->getCapabilities() & MediumFormatCapabilities_CreateDynamic))
     2525            &&  !(m->formatObj->i_getCapabilities() & MediumFormatCapabilities_CreateDynamic))
    25262526            throw setError(VBOX_E_NOT_SUPPORTED,
    25272527                           tr("Medium format '%s' does not support fixed storage creation"),
     
    31943194{
    31953195    if (    m->formatObj
    3196          && (m->formatObj->getCapabilities() & MediumFormatCapabilities_File)
     3196         && (m->formatObj->i_getCapabilities() & MediumFormatCapabilities_File)
    31973197       )
    31983198        return true;
     
    41374137
    41384138    /* check that our own format supports diffs */
    4139     if (!(m->formatObj->getCapabilities() & MediumFormatCapabilities_Differencing))
     4139    if (!(m->formatObj->i_getCapabilities() & MediumFormatCapabilities_Differencing))
    41404140    {
    41414141        /* use the default format if not */
     
    42704270        LogFlowThisFunc(("aWait=%RTbool locationFull=%s\n", aWait, getLocationFull().c_str() ));
    42714271
    4272         if (    !(m->formatObj->getCapabilities() & (   MediumFormatCapabilities_CreateDynamic
     4272        if (    !(m->formatObj->i_getCapabilities() & (   MediumFormatCapabilities_CreateDynamic
    42734273                                                      | MediumFormatCapabilities_CreateFixed)))
    42744274            throw setError(VBOX_E_NOT_SUPPORTED,
     
    56765676            }
    56775677
    5678             if (formatObj->getCapabilities() & MediumFormatCapabilities_Uuid)
     5678            if (formatObj->i_getCapabilities() & MediumFormatCapabilities_Uuid)
    56795679            {
    56805680                /* Modify the UUIDs if necessary. The associated fields are
     
    62046204
    62056205    if (   isImport
    6206         || (   (m->formatObj->getCapabilities() & MediumFormatCapabilities_File)
     6206        || (   (m->formatObj->i_getCapabilities() & MediumFormatCapabilities_File)
    62076207            && !m->hostDrive))
    62086208    {
     
    62146214        {
    62156215            /* must be a file (formatObj must be already known) */
    6216             Assert(m->formatObj->getCapabilities() & MediumFormatCapabilities_File);
     6216            Assert(m->formatObj->i_getCapabilities() & MediumFormatCapabilities_File);
    62176217
    62186218            if (RTPathFilename(aLocation.c_str()) == NULL)
     
    62226222                 * this */
    62236223
    6224                 ComAssertMsgRet(!m->formatObj->getFileExtensions().empty(),
     6224                ComAssertMsgRet(!m->formatObj->i_getFileExtensions().empty(),
    62256225                                ("Must be at least one extension if it is MediumFormatCapabilities_File\n"),
    62266226                                E_FAIL);
    62276227
    6228                 Utf8Str strExt = m->formatObj->getFileExtensions().front();
     6228                Utf8Str strExt = m->formatObj->i_getFileExtensions().front();
    62296229                ComAssertMsgRet(!strExt.isEmpty(),
    62306230                                ("Default extension must not be empty\n"),
     
    62406240        // we must always have full paths now (if it refers to a file)
    62416241        if (   (   m->formatObj.isNull()
    6242                 || m->formatObj->getCapabilities() & MediumFormatCapabilities_File)
     6242                || m->formatObj->i_getCapabilities() & MediumFormatCapabilities_File)
    62436243            && !RTPathStartsWithRoot(locationFull.c_str()))
    62446244            return setError(VBOX_E_FILE_ERROR,
     
    63266326
    63276327        /* is it still a file? */
    6328         if (    (m->formatObj->getCapabilities() & MediumFormatCapabilities_File)
     6328        if (    (m->formatObj->i_getCapabilities() & MediumFormatCapabilities_File)
    63296329             && (m->state == MediumState_NotCreated)
    63306330           )
     
    63746374        Assert(m->mapProperties.empty());
    63756375
    6376         for (MediumFormat::PropertyList::const_iterator it = m->formatObj->getProperties().begin();
    6377              it != m->formatObj->getProperties().end();
     6376        for (MediumFormat::PropertyArray::const_iterator it = m->formatObj->i_getProperties().begin();
     6377             it != m->formatObj->i_getProperties().end();
    63786378             ++it)
    63796379        {
     
    67646764        Utf8Str format(m->strFormat);
    67656765        Utf8Str location(m->strLocationFull);
    6766         uint64_t capabilities = m->formatObj->getCapabilities();
     6766        uint64_t capabilities = m->formatObj->i_getCapabilities();
    67676767        ComAssertThrow(capabilities & (  MediumFormatCapabilities_CreateFixed
    67686768                                       | MediumFormatCapabilities_CreateDynamic), E_FAIL);
     
    69046904        Utf8Str targetFormat(pTarget->m->strFormat);
    69056905        Utf8Str targetLocation(pTarget->m->strLocationFull);
    6906         uint64_t capabilities = pTarget->m->formatObj->getCapabilities();
     6906        uint64_t capabilities = pTarget->m->formatObj->i_getCapabilities();
    69076907        ComAssertThrow(capabilities & MediumFormatCapabilities_CreateDynamic, E_FAIL);
    69086908
     
    74427442            Utf8Str targetFormat(pTarget->m->strFormat);
    74437443            Utf8Str targetLocation(pTarget->m->strLocationFull);
    7444             uint64_t capabilities = pTarget->m->formatObj->getCapabilities();
     7444            uint64_t capabilities = pTarget->m->formatObj->i_getCapabilities();
    74457445
    74467446            Assert(   pTarget->m->state == MediumState_Creating
     
    81258125            }
    81268126
    8127             Utf8Str targetFormat(task.mFormat->getId());
     8127            Utf8Str targetFormat(task.mFormat->i_getId());
    81288128            Utf8Str targetLocation(task.mFilename);
    8129             uint64_t capabilities = task.mFormat->getCapabilities();
     8129            uint64_t capabilities = task.mFormat->i_getCapabilities();
    81308130
    81318131            Assert(m->state == MediumState_LockedRead);
     
    82388238            /* Open source medium. */
    82398239            vrc = VDOpen(hdd,
    8240                          task.mFormat->getId().c_str(),
     8240                         task.mFormat->i_getId().c_str(),
    82418241                         task.mFilename.c_str(),
    82428242                         VD_OPEN_FLAGS_READONLY | VD_OPEN_FLAGS_SEQUENTIAL | m->uOpenFlagsDef,
     
    82508250            Utf8Str targetFormat(m->strFormat);
    82518251            Utf8Str targetLocation(m->strLocationFull);
    8252             uint64_t capabilities = task.mFormat->getCapabilities();
     8252            uint64_t capabilities = task.mFormat->i_getCapabilities();
    82538253
    82548254            Assert(   m->state == MediumState_Creating
  • trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp

    r44948 r45491  
    11061106        /* MediumFormat is all const, no need to lock */
    11071107
    1108         if ((*it)->getId().compare(aFormat, Utf8Str::CaseInsensitive) == 0)
     1108        if ((*it)->i_getId().compare(aFormat, Utf8Str::CaseInsensitive) == 0)
    11091109        {
    11101110            format = *it;
     
    11391139    {
    11401140        /* MediumFormat is all const, no need to lock */
    1141         MediumFormat::StrList aFileList = (*it)->getFileExtensions();
    1142         for (MediumFormat::StrList::const_iterator it1 = aFileList.begin();
     1141        MediumFormat::StrArray aFileList = (*it)->i_getFileExtensions();
     1142        for (MediumFormat::StrArray::const_iterator it1 = aFileList.begin();
    11431143             it1 != aFileList.end();
    11441144             ++it1)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette