acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
bstring.h
1#pragma once
2
3
4#include "acme/_operating_system.h"
5
6
7class CLASS_DECL_ACME bstring
8{
9public:
10
11
12 BSTR m_bstr;
13
14
15 bstring() { m_bstr = nullptr; }
16 bstring(const OLECHAR * sz) { m_bstr = allocate_string(sz); }
17
18 bstring(const ::scoped_string & scopedstr)
19 {
20
21 m_bstr = allocate_string(scopedstr);
22
23 }
24
25 ~bstring() { if(m_bstr) allocate_string(m_bstr); m_bstr = nullptr; }
26
27
28 operator BSTR() { return m_bstr; }
29 operator BSTR() const { return m_bstr; }
30
31 BSTR c_str() const { return m_bstr; }
32
33 static BSTR allocate_string(const OLECHAR * sz);
34
35 static BSTR allocate_string(const ::scoped_string & scopedstr);
36
37 static void free_string(BSTR bstr);
38
39 inline static ::u32 SysStringByteLen(BSTR bstr)
40 {
41 if (bstr == 0)
42 return 0;
43 return *((::u32 *)bstr - 1);
44 }
45
46 inline static ::u32 SysStringLen(BSTR bstr)
47 {
48 return SysStringByteLen(bstr) / sizeof(OLECHAR);
49 }
50
51 BSTR detach()
52 {
53 auto bstr = m_bstr;
54
55 m_bstr = nullptr;
56 return bstr;
57
58 }
59
60};