~ubuntu-branches/ubuntu/precise/p7zip/precise-updates

« back to all changes in this revision

Viewing changes to CPP/Common/MyCom.h

  • Committer: Bazaar Package Importer
  • Author(s): Mohammed Adnène Trojette
  • Date: 2009-02-14 20:12:27 UTC
  • mfrom: (1.1.11 upstream) (2.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090214201227-go63qxm9ozfdma60
Tags: 4.65~dfsg.1-1
* New upstream release.
* Remove wx2.8 Build-Depends added by mistakes (7zG is not yet
  intended to be built).
* Use dh_clean without -k.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
#include "MyWindows.h"
7
7
 
8
8
#ifndef RINOK
9
 
#define RINOK(x) { HRESULT __result_ = (x); if(__result_ != S_OK) return __result_; }
 
9
#define RINOK(x) { HRESULT __result_ = (x); if (__result_ != S_OK) return __result_; }
10
10
#endif
11
11
 
12
12
template <class T>
28
28
  // T& operator*() const {  return *_p; }
29
29
  T** operator&() { return &_p; }
30
30
  T* operator->() const { return _p; }
31
 
  T* operator=(T* p) 
32
 
  { 
 
31
  T* operator=(T* p)
 
32
  {
33
33
    if (p != 0)
34
34
      p->AddRef();
35
 
    if (_p) 
 
35
    if (_p)
36
36
      _p->Release();
37
37
    _p = p;
38
38
    return p;
78
78
 
79
79
//////////////////////////////////////////////////////////
80
80
 
 
81
inline HRESULT StringToBstr(LPCOLESTR src, BSTR *bstr)
 
82
{
 
83
  *bstr = ::SysAllocString(src);
 
84
  return (*bstr != 0) ? S_OK : E_OUTOFMEMORY;
 
85
}
 
86
 
81
87
class CMyComBSTR
82
88
{
83
89
public:
84
90
  BSTR m_str;
85
 
  CMyComBSTR() { m_str = NULL; }
86
 
  CMyComBSTR(LPCOLESTR pSrc) {  m_str = ::SysAllocString(pSrc);  }
 
91
  CMyComBSTR(): m_str(NULL) {}
 
92
  CMyComBSTR(LPCOLESTR src) { m_str = ::SysAllocString(src); }
87
93
  // CMyComBSTR(int nSize) { m_str = ::SysAllocStringLen(NULL, nSize); }
88
94
  // CMyComBSTR(int nSize, LPCOLESTR sz) { m_str = ::SysAllocStringLen(sz, nSize);  }
89
95
  CMyComBSTR(const CMyComBSTR& src) { m_str = src.MyCopy(); }
107
113
    }
108
114
    return *this;
109
115
  }
110
 
  CMyComBSTR& operator=(LPCOLESTR pSrc)
 
116
  CMyComBSTR& operator=(LPCOLESTR src)
111
117
  {
112
118
    ::SysFreeString(m_str);
113
 
    m_str = ::SysAllocString(pSrc);
 
119
    m_str = ::SysAllocString(src);
114
120
    return *this;
115
121
  }
116
122
  unsigned int Length() const { return ::SysStringLen(m_str); }
117
123
  operator BSTR() const { return m_str; }
118
124
  BSTR* operator&() { return &m_str; }
119
 
  BSTR MyCopy() const 
120
 
  { 
 
125
  BSTR MyCopy() const
 
126
  {
121
127
    int byteLen = ::SysStringByteLen(m_str);
122
128
    BSTR res = ::SysAllocStringByteLen(NULL, byteLen);
123
 
    memmove(res, m_str, byteLen);
 
129
    memcpy(res, m_str, byteLen);
124
130
    return res;
125
131
  }
126
 
  void Attach(BSTR src) {  m_str = src; }
 
132
  /*
 
133
  void Attach(BSTR src) { m_str = src; }
127
134
  BSTR Detach()
128
135
  {
129
136
    BSTR s = m_str;
130
137
    m_str = NULL;
131
138
    return s;
132
139
  }
 
140
  */
133
141
  void Empty()
134
142
  {
135
143
    ::SysFreeString(m_str);
138
146
  bool operator!() const {  return (m_str == NULL); }
139
147
};
140
148
 
141
 
 
142
149
//////////////////////////////////////////////////////////
143
150
 
144
151
class CMyUnknownImp
149
156
};
150
157
 
151
158
#define MY_QUERYINTERFACE_BEGIN STDMETHOD(QueryInterface) \
152
 
    (REFGUID iid, void **outObject) { 
 
159
    (REFGUID iid, void **outObject) {
153
160
 
154
161
#define MY_QUERYINTERFACE_ENTRY(i) if (iid == IID_ ## i) \
155
162
    { *outObject = (void *)(i *)this; AddRef(); return S_OK; }