aboutsummaryrefslogtreecommitdiff
path: root/Src/devices/deviceSupportedCommand.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/devices/deviceSupportedCommand.cpp')
-rw-r--r--Src/devices/deviceSupportedCommand.cpp120
1 files changed, 120 insertions, 0 deletions
diff --git a/Src/devices/deviceSupportedCommand.cpp b/Src/devices/deviceSupportedCommand.cpp
new file mode 100644
index 00000000..b5e09147
--- /dev/null
+++ b/Src/devices/deviceSupportedCommand.cpp
@@ -0,0 +1,120 @@
+#include "main.h"
+#include "./deviceSupportedCommand.h"
+
+DeviceSupportedCommand::DeviceSupportedCommand()
+ : ref(1), name(NULL), flags(DeviceCommandFlag_None)
+{
+}
+
+DeviceSupportedCommand::~DeviceSupportedCommand()
+{
+ AnsiString_Free(name);
+}
+
+HRESULT DeviceSupportedCommand::CreateInstance(const char *name, DeviceSupportedCommand **instance)
+{
+ DeviceSupportedCommand *self;
+
+ if (NULL == instance)
+ return E_POINTER;
+
+ *instance = NULL;
+
+ self = new DeviceSupportedCommand();
+ if (NULL == self)
+ return E_OUTOFMEMORY;
+
+ self->name = AnsiString_Duplicate(name);
+
+ *instance = self;
+ return S_OK;
+}
+
+size_t DeviceSupportedCommand::AddRef()
+{
+ return InterlockedIncrement((LONG*)&ref);
+}
+
+size_t DeviceSupportedCommand::Release()
+{
+ if (0 == ref)
+ return ref;
+
+ LONG r = InterlockedDecrement((LONG*)&ref);
+ if (0 == r)
+ delete(this);
+
+ return r;
+}
+
+int DeviceSupportedCommand::QueryInterface(GUID interface_guid, void **object)
+{
+ if (NULL == object)
+ return E_POINTER;
+
+ if (IsEqualIID(interface_guid, IFC_DeviceSupportedCommand))
+ *object = static_cast<ifc_devicesupportedcommand*>(this);
+ else
+ {
+ *object = NULL;
+ return E_NOINTERFACE;
+ }
+
+ if (NULL == *object)
+ return E_UNEXPECTED;
+
+ AddRef();
+ return S_OK;
+}
+
+const char *DeviceSupportedCommand::GetName()
+{
+ return name;
+}
+
+HRESULT DeviceSupportedCommand::GetFlags(DeviceCommandFlags *flagsOut)
+{
+ if (NULL == flagsOut)
+ return E_POINTER;
+
+ *flagsOut = flags;
+
+ return S_OK;
+}
+
+HRESULT DeviceSupportedCommand::SetFlags(DeviceCommandFlags mask, DeviceCommandFlags value)
+{
+ DeviceCommandFlags temp;
+ temp = (flags & mask) | (mask & value);
+
+ if (temp == flags)
+ return S_FALSE;
+
+ flags = temp;
+
+ return S_OK;
+}
+
+HRESULT DeviceSupportedCommand::Clone(DeviceSupportedCommand **instance)
+{
+ HRESULT hr;
+
+ hr = DeviceSupportedCommand::CreateInstance(name, instance);
+ if (SUCCEEDED(hr))
+ {
+ (*instance)->flags = flags;
+ }
+
+ return hr;
+
+}
+
+#define CBCLASS DeviceSupportedCommand
+START_DISPATCH;
+CB(ADDREF, AddRef)
+CB(RELEASE, Release)
+CB(QUERYINTERFACE, QueryInterface)
+CB(API_GETNAME, GetName)
+CB(API_GETFLAGS, GetFlags)
+END_DISPATCH;
+#undef CBCLASS \ No newline at end of file