Skip to content

Commit c1fedb5

Browse files
committed
Show the name of known GUIDs
1 parent 4c9aa70 commit c1fedb5

File tree

7 files changed

+179
-35
lines changed

7 files changed

+179
-35
lines changed

src/buffer.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ HRESULT Buffer::setLocation(LocStatus locStatus) noexcept
539539

540540
HRESULT STDMETHODCALLTYPE Buffer::QueryInterface(REFIID riid, void** ppvObject) noexcept
541541
{
542-
DEBUG(PREFIX "QueryInterface (%p)->(%s, %p)\n", voidp{this}, GuidPrinter{riid}.c_str(),
542+
DEBUG(PREFIX "QueryInterface (%p)->(%s, %p)\n", voidp{this}, IidPrinter{riid}.c_str(),
543543
voidp{ppvObject});
544544

545545
*ppvObject = nullptr;
@@ -595,7 +595,7 @@ HRESULT STDMETHODCALLTYPE Buffer::QueryInterface(REFIID riid, void** ppvObject)
595595
return S_OK;
596596
}
597597

598-
FIXME(PREFIX "QueryInterface Unhandled GUID: %s\n", GuidPrinter{riid}.c_str());
598+
FIXME(PREFIX "QueryInterface Unhandled GUID: %s\n", IidPrinter{riid}.c_str());
599599
return E_NOINTERFACE;
600600
}
601601

@@ -1821,7 +1821,7 @@ HRESULT STDMETHODCALLTYPE Buffer::Prop::Get(REFGUID guidPropSet, ULONG dwPropID,
18211821
ULONG *pcbReturned) noexcept
18221822
{
18231823
DEBUG(PREFIX "Get (%p)->(%s, 0x%lx, %p, %lu, %p, %lu, %p)\n", voidp{this},
1824-
GuidPrinter{guidPropSet}.c_str(), dwPropID, pInstanceData, cbInstanceData, pPropData,
1824+
PropidPrinter{guidPropSet}.c_str(), dwPropID, pInstanceData, cbInstanceData, pPropData,
18251825
cbPropData, voidp{pcbReturned});
18261826

18271827
if(!pcbReturned)
@@ -1919,7 +1919,7 @@ HRESULT STDMETHODCALLTYPE Buffer::Prop::Set(REFGUID guidPropSet, ULONG dwPropID,
19191919
void *pInstanceData, ULONG cbInstanceData, void *pPropData, ULONG cbPropData) noexcept
19201920
{
19211921
DEBUG(PREFIX "Set (%p)->(%s, 0x%lx, %p, %lu, %p, %lu)\n", voidp{this},
1922-
GuidPrinter{guidPropSet}.c_str(), dwPropID, pInstanceData, cbInstanceData, pPropData,
1922+
PropidPrinter{guidPropSet}.c_str(), dwPropID, pInstanceData, cbInstanceData, pPropData,
19231923
cbPropData);
19241924

19251925
if(cbPropData > 0 && !pPropData)
@@ -2004,7 +2004,7 @@ HRESULT STDMETHODCALLTYPE Buffer::Prop::QuerySupport(REFGUID guidPropSet, ULONG
20042004
ULONG *pTypeSupport) noexcept
20052005
{
20062006
DEBUG(PREFIX "QuerySupport (%p)->(%s, 0x%lx, %p)\n", voidp{this},
2007-
GuidPrinter{guidPropSet}.c_str(), dwPropID, voidp{pTypeSupport});
2007+
PropidPrinter{guidPropSet}.c_str(), dwPropID, voidp{pTypeSupport});
20082008

20092009
if(!pTypeSupport)
20102010
return E_POINTER;
@@ -2070,7 +2070,7 @@ HRESULT STDMETHODCALLTYPE Buffer::Prop::QuerySupport(REFGUID guidPropSet, ULONG
20702070
}
20712071

20722072
FIXME(PREFIX "QuerySupport Unhandled propset: %s (propid: %lu)\n",
2073-
GuidPrinter{guidPropSet}.c_str(), dwPropID);
2073+
PropidPrinter{guidPropSet}.c_str(), dwPropID);
20742074
return E_PROP_ID_UNSUPPORTED;
20752075
}
20762076
#undef PREFIX

src/capture.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ DSCapture::~DSCapture() = default;
2323

2424
HRESULT STDMETHODCALLTYPE DSCapture::QueryInterface(REFIID riid, void **ppvObject) noexcept
2525
{
26-
DEBUG(PREFIX "QueryInterface (%p)->(%s, %p)\n", voidp{this}, GuidPrinter{riid}.c_str(),
26+
DEBUG(PREFIX "QueryInterface (%p)->(%s, %p)\n", voidp{this}, IidPrinter{riid}.c_str(),
2727
voidp{ppvObject});
2828

2929
*ppvObject = nullptr;
@@ -40,7 +40,7 @@ HRESULT STDMETHODCALLTYPE DSCapture::QueryInterface(REFIID riid, void **ppvObjec
4040
return S_OK;
4141
}
4242

43-
FIXME(PREFIX "QueryInterface Unhandled GUID: %s\n", GuidPrinter{riid}.c_str());
43+
FIXME(PREFIX "QueryInterface Unhandled GUID: %s\n", IidPrinter{riid}.c_str());
4444
return E_NOINTERFACE;
4545
}
4646

@@ -77,7 +77,7 @@ HRESULT STDMETHODCALLTYPE DSCapture::GetCaps(DSCCAPS *dscCaps) noexcept
7777

7878
HRESULT STDMETHODCALLTYPE DSCapture::Initialize(const GUID *guid) noexcept
7979
{
80-
FIXME(PREFIX "Initialize (%p)->(%s)\n", voidp{this}, GuidPrinter{guid}.c_str());
80+
FIXME(PREFIX "Initialize (%p)->(%s)\n", voidp{this}, DevidPrinter{guid}.c_str());
8181
return E_NOTIMPL;
8282
}
8383
#undef PREFIX

src/dsoal.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ HRESULT WINAPI DSOAL_DirectSoundCreate(const GUID *deviceId, IDirectSound **ds,
388388

389389
HRESULT WINAPI DSOAL_DirectSoundCreate8(const GUID *deviceId, IDirectSound8 **ds, IUnknown *outer) noexcept
390390
{
391-
TRACE("DirectSoundCreate8 (%s, %p, %p)\n", GuidPrinter{deviceId}.c_str(), voidp{ds},
391+
TRACE("DirectSoundCreate8 (%s, %p, %p)\n", DevidPrinter{deviceId}.c_str(), voidp{ds},
392392
voidp{outer});
393393

394394
if(!ds)
@@ -425,7 +425,7 @@ HRESULT WINAPI DSOAL_DirectSoundCreate8(const GUID *deviceId, IDirectSound8 **ds
425425
HRESULT WINAPI DSOAL_DirectSoundCaptureCreate(const GUID *deviceId, IDirectSoundCapture **ds,
426426
IUnknown *outer) noexcept
427427
{
428-
TRACE("DirectSoundCaptureCreate (%s, %p, %p)\n", GuidPrinter{deviceId}.c_str(), voidp{ds},
428+
TRACE("DirectSoundCaptureCreate (%s, %p, %p)\n", DevidPrinter{deviceId}.c_str(), voidp{ds},
429429
voidp{outer});
430430

431431
if(!ds)
@@ -462,7 +462,7 @@ HRESULT WINAPI DSOAL_DirectSoundCaptureCreate(const GUID *deviceId, IDirectSound
462462
HRESULT WINAPI DSOAL_DirectSoundCaptureCreate8(const GUID *deviceId, IDirectSoundCapture8 **ds,
463463
IUnknown *outer) noexcept
464464
{
465-
TRACE("DirectSoundCaptureCreate8 (%s, %p, %p)\n", GuidPrinter{deviceId}.c_str(), voidp{ds},
465+
TRACE("DirectSoundCaptureCreate8 (%s, %p, %p)\n", DevidPrinter{deviceId}.c_str(), voidp{ds},
466466
voidp{outer});
467467

468468
if(!ds)
@@ -503,7 +503,7 @@ HRESULT WINAPI DSOAL_DirectSoundFullDuplexCreate(const GUID *captureDevice,
503503
IDirectSoundBuffer8 **renderBuffer8, IUnknown *outer) noexcept
504504
{
505505
TRACE("DirectSoundFullDuplexCreate (%s, %s, %p, %p, %p, %lu, %p, %p, %p, %p)\n",
506-
GuidPrinter{captureDevice}.c_str(), GuidPrinter{renderDevice}.c_str(),
506+
DevidPrinter{captureDevice}.c_str(), DevidPrinter{renderDevice}.c_str(),
507507
cvoidp{captureBufferDesc}, cvoidp{renderBufferDesc}, voidp{hWnd}, coopLevel,
508508
voidp{fullDuplex}, voidp{captureBuffer8}, voidp{renderBuffer8}, voidp{outer});
509509
return E_NOTIMPL;
@@ -699,8 +699,8 @@ HRESULT WINAPI DSOAL_DllCanUnloadNow() noexcept
699699

700700
HRESULT WINAPI DSOAL_DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv) noexcept
701701
{
702-
TRACE("DllGetClassObject (%s, %s, %p)\n", GuidPrinter{rclsid}.c_str(),
703-
GuidPrinter{riid}.c_str(), voidp{ppv});
702+
TRACE("DllGetClassObject (%s, %s, %p)\n", ClsidPrinter{rclsid}.c_str(),
703+
IidPrinter{riid}.c_str(), voidp{ppv});
704704

705705
if(!ppv)
706706
{
@@ -714,7 +714,7 @@ HRESULT WINAPI DSOAL_DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
714714

715715
HRESULT WINAPI DSOAL_GetDeviceID(const GUID *guidSrc, GUID *guidDst) noexcept
716716
{
717-
TRACE("GetDeviceID (%s, %p)\n", GuidPrinter{guidSrc}.c_str(), voidp{guidDst});
717+
TRACE("GetDeviceID (%s, %p)\n", DevidPrinter{guidSrc}.c_str(), voidp{guidDst});
718718

719719
if(!guidSrc || !guidDst)
720720
return DSERR_INVALIDPARAM;

src/dsoundoal.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ void DSound8OAL::addNotifyBuffer(Buffer *buffer)
457457
#define PREFIX CLASS_PREFIX "QueryInterface "
458458
HRESULT STDMETHODCALLTYPE DSound8OAL::QueryInterface(REFIID riid, void** ppvObject) noexcept
459459
{
460-
DEBUG(PREFIX "(%p)->(%s, %p)\n", voidp{this}, GuidPrinter{riid}.c_str(), voidp{ppvObject});
460+
DEBUG(PREFIX "(%p)->(%s, %p)\n", voidp{this}, IidPrinter{riid}.c_str(), voidp{ppvObject});
461461

462462
*ppvObject = nullptr;
463463
if(riid == IID_IUnknown)
@@ -484,7 +484,7 @@ HRESULT STDMETHODCALLTYPE DSound8OAL::QueryInterface(REFIID riid, void** ppvObje
484484
return S_OK;
485485
}
486486

487-
FIXME(PREFIX "Unhandled GUID: %s\n", GuidPrinter{riid}.c_str());
487+
FIXME(PREFIX "Unhandled GUID: %s\n", IidPrinter{riid}.c_str());
488488
return E_NOINTERFACE;
489489
}
490490
#undef PREFIX
@@ -551,7 +551,7 @@ HRESULT STDMETHODCALLTYPE DSound8OAL::CreateSoundBuffer(const DSBUFFERDESC *buff
551551
" BufferBytes = %lu\n"
552552
" 3DAlgorithm = %s\n",
553553
bufdesc.dwSize, bufdesc.dwFlags, bufdesc.dwBufferBytes,
554-
GuidPrinter{bufdesc.guid3DAlgorithm}.c_str());
554+
Ds3dalgPrinter{bufdesc.guid3DAlgorithm}.c_str());
555555
}
556556
else
557557
{
@@ -805,7 +805,7 @@ HRESULT STDMETHODCALLTYPE DSound8OAL::SetSpeakerConfig(DWORD speakerConfig) noex
805805
#define PREFIX CLASS_PREFIX "Initialize "
806806
HRESULT STDMETHODCALLTYPE DSound8OAL::Initialize(const GUID *deviceId) noexcept
807807
{
808-
DEBUG(PREFIX "(%p)->(%s)\n", voidp{this}, GuidPrinter{deviceId}.c_str());
808+
DEBUG(PREFIX "(%p)->(%s)\n", voidp{this}, DevidPrinter{deviceId}.c_str());
809809

810810
if(mShared)
811811
{

src/factory.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ HRESULT Factory::GetFactory(const GUID &clsid, const GUID &iid, void **out)
5252
return factory.QueryInterface(iid, out);
5353
}
5454

55-
FIXME(PREFIX "GetFactory No class found for %s\n", GuidPrinter{clsid}.c_str());
55+
FIXME(PREFIX "GetFactory No class found for %s\n", ClsidPrinter{clsid}.c_str());
5656
return CLASS_E_CLASSNOTAVAILABLE;
5757
}
5858

5959

6060
HRESULT STDMETHODCALLTYPE Factory::QueryInterface(REFIID riid, void** ppvObject) noexcept
6161
{
62-
DEBUG(PREFIX "QueryInterface (%p)->(%s, %p)\n", voidp{this}, GuidPrinter{riid}.c_str(),
62+
DEBUG(PREFIX "QueryInterface (%p)->(%s, %p)\n", voidp{this}, IidPrinter{riid}.c_str(),
6363
voidp{ppvObject});
6464

6565
if(!ppvObject)
@@ -79,7 +79,7 @@ HRESULT STDMETHODCALLTYPE Factory::QueryInterface(REFIID riid, void** ppvObject)
7979
return S_OK;
8080
}
8181

82-
FIXME(PREFIX "QueryInterface Unhandled GUID: %s\n", GuidPrinter{riid}.c_str());
82+
FIXME(PREFIX "QueryInterface Unhandled GUID: %s\n", IidPrinter{riid}.c_str());
8383
return E_NOINTERFACE;
8484
}
8585

@@ -110,7 +110,8 @@ ULONG STDMETHODCALLTYPE Factory::Release() noexcept
110110

111111
HRESULT STDMETHODCALLTYPE Factory::CreateInstance(IUnknown *unkOuter, REFIID riid, void **ppvObject) noexcept
112112
{
113-
TRACE(PREFIX "CreateInstance (%p)->(%p, %s, %p)\n", voidp{this}, voidp{unkOuter}, GuidPrinter{riid}.c_str(), voidp{ppvObject});
113+
TRACE(PREFIX "CreateInstance (%p)->(%p, %s, %p)\n", voidp{this}, voidp{unkOuter},
114+
IidPrinter{riid}.c_str(), voidp{ppvObject});
114115

115116
if(!ppvObject)
116117
{

src/guidprinter.h

Lines changed: 152 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,174 @@
44
#include <cstdio>
55
#include <cstring>
66
#include <iterator>
7+
8+
#include <dsound.h>
9+
#include <ks.h>
710
#include <objbase.h>
811

12+
#include "eax.h"
13+
#include "vmanager.h"
14+
15+
16+
struct IidTag { };
17+
struct ClsidTag { };
18+
struct PropidTag { };
19+
struct DevidTag { };
20+
struct Ds3dalgTag { };
921

1022
class GuidPrinter {
11-
char mMsg[64];
23+
char mMsg[48];
24+
const char *mIdStr{};
1225

1326
void store(const GUID &guid)
1427
{
1528
std::snprintf(mMsg, std::size(mMsg), "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
1629
DWORD{guid.Data1}, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
1730
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
31+
mIdStr = mMsg;
1832
}
1933

20-
public:
21-
GuidPrinter(const GUID &guid) { store(guid); }
22-
GuidPrinter(const GUID *guid)
34+
void store_iid(const GUID &guid)
35+
{
36+
if(guid == GUID_NULL) mIdStr = "GUID_NULL";
37+
#define CHECKID(x) else if(guid == x) mIdStr = #x;
38+
CHECKID(IID_IDirectSound)
39+
CHECKID(IID_IDirectSound8)
40+
CHECKID(IID_IDirectSoundBuffer)
41+
CHECKID(IID_IDirectSoundBuffer8)
42+
CHECKID(IID_IDirectSound3DBuffer)
43+
CHECKID(IID_IDirectSound3DListener)
44+
CHECKID(IID_IDirectSoundNotify)
45+
CHECKID(IID_IDirectSoundCapture)
46+
CHECKID(IID_IDirectSoundCaptureBuffer)
47+
CHECKID(IID_IDirectSoundCaptureBuffer8)
48+
CHECKID(IID_IDirectSoundFullDuplex)
49+
CHECKID(IID_IKsPropertySet)
50+
CHECKID(IID_IClassFactory)
51+
CHECKID(IID_IUnknown)
52+
if(mIdStr) return;
53+
54+
std::snprintf(mMsg, std::size(mMsg), "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
55+
DWORD{guid.Data1}, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
56+
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
57+
mIdStr = mMsg;
58+
}
59+
60+
void store_propid(const GUID &guid)
61+
{
62+
if(false) { }
63+
CHECKID(DSPROPSETID_EAX10_ListenerProperties)
64+
CHECKID(DSPROPSETID_EAX10_BufferProperties)
65+
CHECKID(DSPROPSETID_EAX20_ListenerProperties)
66+
CHECKID(DSPROPSETID_EAX20_BufferProperties)
67+
CHECKID(DSPROPSETID_EAX30_ListenerProperties)
68+
CHECKID(DSPROPSETID_EAX30_BufferProperties)
69+
CHECKID(EAXPROPERTYID_EAX40_Context)
70+
CHECKID(EAXPROPERTYID_EAX40_FXSlot0)
71+
CHECKID(EAXPROPERTYID_EAX40_FXSlot1)
72+
CHECKID(EAXPROPERTYID_EAX40_FXSlot2)
73+
CHECKID(EAXPROPERTYID_EAX40_FXSlot3)
74+
CHECKID(EAXPROPERTYID_EAX40_Source)
75+
CHECKID(DSPROPSETID_VoiceManager)
76+
if(mIdStr) return;
77+
78+
std::snprintf(mMsg, std::size(mMsg), "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
79+
DWORD{guid.Data1}, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
80+
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
81+
mIdStr = mMsg;
82+
}
83+
84+
void store_ds3dalg(const GUID &guid)
2385
{
24-
if(!guid)
25-
std::strcpy(mMsg, "<null>");
26-
else
27-
store(*guid);
86+
if(false) { }
87+
CHECKID(DS3DALG_DEFAULT)
88+
CHECKID(DS3DALG_NO_VIRTUALIZATION)
89+
CHECKID(DS3DALG_HRTF_FULL)
90+
CHECKID(DS3DALG_HRTF_LIGHT)
91+
if(mIdStr) return;
92+
93+
std::snprintf(mMsg, std::size(mMsg), "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
94+
DWORD{guid.Data1}, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
95+
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
96+
mIdStr = mMsg;
2897
}
2998

30-
const char *c_str() const { return mMsg; }
99+
void store_devid(const GUID &guid)
100+
{
101+
if(guid == GUID_NULL) mIdStr = "GUID_NULL";
102+
CHECKID(DSDEVID_DefaultPlayback)
103+
CHECKID(DSDEVID_DefaultCapture)
104+
CHECKID(DSDEVID_DefaultVoicePlayback)
105+
CHECKID(DSDEVID_DefaultVoiceCapture)
106+
if(mIdStr) return;
107+
108+
std::snprintf(mMsg, std::size(mMsg), "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
109+
DWORD{guid.Data1}, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
110+
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
111+
mIdStr = mMsg;
112+
}
113+
114+
void store_clsid(const GUID &guid)
115+
{
116+
if(false) { }
117+
CHECKID(CLSID_DirectSound)
118+
CHECKID(CLSID_DirectSound8)
119+
CHECKID(CLSID_DirectSoundCapture)
120+
CHECKID(CLSID_DirectSoundCapture8)
121+
CHECKID(CLSID_DirectSoundFullDuplex)
122+
if(mIdStr) return;
123+
124+
std::snprintf(mMsg, std::size(mMsg), "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
125+
DWORD{guid.Data1}, guid.Data2, guid.Data3, guid.Data4[0], guid.Data4[1], guid.Data4[2],
126+
guid.Data4[3], guid.Data4[4], guid.Data4[5], guid.Data4[6], guid.Data4[7]);
127+
mIdStr = mMsg;
128+
}
129+
130+
public:
131+
GuidPrinter(const GUID &guid) { store(guid); }
132+
GuidPrinter(IidTag, const GUID &guid) { store_iid(guid); }
133+
GuidPrinter(ClsidTag, const GUID &guid) { store_clsid(guid); }
134+
GuidPrinter(DevidTag, const GUID &guid) { store_devid(guid); }
135+
GuidPrinter(PropidTag, const GUID &guid) { store_propid(guid); }
136+
GuidPrinter(Ds3dalgTag, const GUID &guid) { store_ds3dalg(guid); }
137+
138+
GuidPrinter(const GUID *guid) { if(!guid) mIdStr = "{null}"; else store(*guid); }
139+
GuidPrinter(ClsidTag, const GUID *guid) { if(!guid) mIdStr = "{null}"; else store_clsid(*guid); }
140+
GuidPrinter(DevidTag, const GUID *guid) { if(!guid) mIdStr = "{null}"; else store_devid(*guid); }
141+
GuidPrinter(PropidTag, const GUID *guid) { if(!guid) mIdStr = "{null}"; else store_propid(*guid); }
142+
GuidPrinter(Ds3dalgTag, const GUID *guid) { if(!guid) mIdStr = "{null}"; else store_ds3dalg(*guid); }
143+
144+
const char *c_str() const { return mIdStr; }
31145
};
32146

147+
class IidPrinter : public GuidPrinter {
148+
public:
149+
template<typename T>
150+
IidPrinter(T&& guid) : GuidPrinter{IidTag{}, std::forward<T>(guid)} { }
151+
};
152+
153+
class ClsidPrinter : public GuidPrinter {
154+
public:
155+
template<typename T>
156+
ClsidPrinter(T&& guid) : GuidPrinter{ClsidTag{}, std::forward<T>(guid)} { }
157+
};
158+
159+
class PropidPrinter : public GuidPrinter {
160+
public:
161+
template<typename T>
162+
PropidPrinter(T&& guid) : GuidPrinter{PropidTag{}, std::forward<T>(guid)} { }
163+
};
164+
165+
class DevidPrinter : public GuidPrinter {
166+
public:
167+
template<typename T>
168+
DevidPrinter(T&& guid) : GuidPrinter{DevidTag{}, std::forward<T>(guid)} { }
169+
};
170+
171+
class Ds3dalgPrinter : public GuidPrinter {
172+
public:
173+
template<typename T>
174+
Ds3dalgPrinter(T&& guid) : GuidPrinter{Ds3dalgTag{}, std::forward<T>(guid)} { }
175+
};
33176

34177
#endif // GUIDPRINTER_H

0 commit comments

Comments
 (0)