VirtualBox

source: vbox/trunk/src/VBox/Main/include/MediumAttachmentImpl.h@ 23880

Last change on this file since 23880 was 23880, checked in by vboxsync, 15 years ago

Main/MediumAttachment: change return value of Controller getter to return a reference to the StorageController instead of just the name

File size: 4.3 KB
Line 
1/** @file
2 *
3 * VirtualBox COM class implementation
4 */
5
6/*
7 * Copyright (C) 2006-2009 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22#ifndef ____H_MEDIUMATTACHMENTIMPL
23#define ____H_MEDIUMATTACHMENTIMPL
24
25#include "VirtualBoxBase.h"
26
27#include "MediumImpl.h"
28#include "StorageControllerImpl.h"
29
30class Machine;
31class Medium;
32
33class ATL_NO_VTABLE MediumAttachment :
34 public VirtualBoxBase,
35 public com::SupportErrorInfoImpl<MediumAttachment, IMediumAttachment>,
36 public VirtualBoxSupportTranslation<MediumAttachment>,
37 VBOX_SCRIPTABLE_IMPL(IMediumAttachment)
38{
39public:
40
41 DECLARE_NOT_AGGREGATABLE(MediumAttachment)
42
43 DECLARE_PROTECT_FINAL_CONSTRUCT()
44
45 BEGIN_COM_MAP(MediumAttachment)
46 COM_INTERFACE_ENTRY(ISupportErrorInfo)
47 COM_INTERFACE_ENTRY(IMediumAttachment)
48 COM_INTERFACE_ENTRY(IDispatch)
49 END_COM_MAP()
50
51 DECLARE_EMPTY_CTOR_DTOR(MediumAttachment)
52
53 // public initializer/uninitializer for internal purposes only
54 HRESULT init(Machine *aParent,
55 Medium *aMedium,
56 StorageController *aController,
57 LONG aPort,
58 LONG aDevice,
59 DeviceType_T aType,
60 bool aImplicit = false);
61 void uninit();
62
63 HRESULT FinalConstruct();
64 void FinalRelease();
65
66 bool rollback();
67 void commit();
68
69 // IMediumAttachment properties
70 STDMETHOD(COMGETTER(Medium))(IMedium **aMedium);
71 STDMETHOD(COMGETTER(Controller))(IStorageController **aController);
72 STDMETHOD(COMGETTER(Port))(LONG *aPort);
73 STDMETHOD(COMGETTER(Device))(LONG *aDevice);
74 STDMETHOD(COMGETTER(Type))(DeviceType_T *aType);
75 STDMETHOD(COMGETTER(Passthrough))(BOOL *aPassthrough);
76 STDMETHOD(COMSETTER(Passthrough))(BOOL aPassthrough);
77
78 // unsafe inline public methods for internal purposes only (ensure there is
79 // a caller and a read lock before calling them!)
80
81 bool isImplicit() const { return m->implicit; }
82 void setImplicit(bool aImplicit) { m->implicit = aImplicit; }
83
84 const ComObjPtr<Medium> &medium() const { return m->medium; }
85 const ComObjPtr<StorageController> &controller() const { return m->controller; }
86 LONG port() const { return m->port; }
87 LONG device() const { return m->device; }
88 DeviceType_T type() const { return m->type; }
89 bool passthrough() const { AutoReadLock lock(this); return m->passthrough; }
90
91 bool matches(CBSTR aController, LONG aPort, LONG aDevice)
92 {
93 return ( aController == m->controller->name()
94 && aPort == m->port
95 && aDevice == m->device);
96 }
97
98 /** Must be called from under this object's write lock. */
99 void updateMedium(const ComObjPtr<Medium> &aMedium, bool aImplicit)
100 {
101 m.backup();
102 m->medium = aMedium;
103 m->implicit = aImplicit;
104 }
105
106 /** For com::SupportErrorInfoImpl. */
107 static const char *ComponentName() { return "MediumAttachment"; }
108
109private:
110
111 /** Reference to Machine object, for checking mutable state. */
112 const ComObjPtr<Machine, ComWeakRef> mParent;
113 /* later: const ComObjPtr<MediumAttachment> mPeer; */
114
115 struct Data
116 {
117 Data() : port(0), device(0), type(DeviceType_Null),
118 passthrough(false), implicit(false) {}
119
120 bool operator== (const Data &that) const
121 {
122 return this == &that
123 || (passthrough == that.passthrough);
124 }
125
126 ComObjPtr<Medium> medium;
127 ComObjPtr<StorageController> controller;
128 const LONG port;
129 const LONG device;
130 const DeviceType_T type;
131 bool passthrough : 1;
132 bool implicit : 1;
133 };
134
135 Backupable<Data> m;
136};
137
138#endif // ____H_MEDIUMATTACHMENTIMPL
139/* vi: set tabstop=4 shiftwidth=4 expandtab: */
Note: See TracBrowser for help on using the repository browser.

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