xref: /AOO41X/main/setup_native/source/win32/customactions/reg4msdoc/registryvalueimpl.cxx (revision 32b1fd08cf0851da51c0ed68f50bc63c4ee660e0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 // RegistryValueImpl.cpp: Implementierung der Klasse RegistryValueImpl.
23 //
24 //////////////////////////////////////////////////////////////////////
25 
26 #include "registryvalueimpl.hxx"
27 
28 #ifdef _MSC_VER
29 #pragma warning(push, 1) /* disable warnings within system headers */
30 #endif
31 #include <windows.h>
32 #ifdef _MSC_VER
33 #pragma warning(pop)
34 #endif
35 
36 #include <malloc.h>
37 #include <assert.h>
38 
39 #include "stringconverter.hxx"
40 
41 //#################################
42 // Creation/Destruction
43 //#################################
44 
45 //--------------------------------------------
46 /**
47 */
RegistryValueImpl(const std::wstring & Name,int Value)48 RegistryValueImpl::RegistryValueImpl(const std::wstring& Name, int Value) :
49     m_Name(Name),
50     m_Type(REG_DWORD),
51     m_IntData(Value)
52 {
53 }
54 
55 //--------------------------------------------
56 /**
57 */
RegistryValueImpl(const std::wstring & Name,const std::wstring & Value)58 RegistryValueImpl::RegistryValueImpl(const std::wstring& Name, const std::wstring& Value) :
59     m_Name(Name),
60     m_Type(REG_SZ),
61     m_StringData(Value),
62     m_IntData(0)
63 {
64 }
65 
66 //--------------------------------------------
67 /**
68 */
RegistryValueImpl(const std::wstring & Name,const std::string & Value)69 RegistryValueImpl::RegistryValueImpl(const std::wstring& Name, const std::string& Value) :
70     m_Name(Name),
71     m_Type(REG_SZ),
72     m_IntData(0)
73 {
74     m_StringData = AnsiToUnicodeString(Value);
75 }
76 
77 #if (_MSC_VER >= 1300)
RegistryValueImpl(const RegistryValueImpl & s)78 RegistryValueImpl::RegistryValueImpl(const RegistryValueImpl& s) :
79     m_Name(s.m_Name),
80     m_Type(s.m_Type),
81     m_StringData(s.m_StringData),
82     m_IntData(s.m_IntData)
83     {
84 }
85 #endif
86 //--------------------------------------------
87 /**
88 */
~RegistryValueImpl()89 RegistryValueImpl::~RegistryValueImpl()
90 {
91 }
92 
93 //#################################
94 // Query
95 //#################################
96 
97 //--------------------------------------------
98 /** Returns the name of the value
99 */
GetName() const100 std::wstring RegistryValueImpl::GetName() const
101 {
102     return m_Name;
103 }
104 
105 //--------------------------------------------
106 /** Return the size of data held
107 */
GetDataSize() const108 size_t RegistryValueImpl::GetDataSize() const
109 {
110     size_t size = 0;
111 
112     if (REG_DWORD == m_Type)
113         size = sizeof(m_IntData);
114     else if (REG_SZ == m_Type)
115         size = m_StringData.length() ? ((m_StringData.length() + 1) * sizeof(wchar_t)) : 0;
116 
117     return size;
118 }
119 
120 //--------------------------------------------
121 /** Get a pointer to the data buffer
122     in order to copy the data
123 */
GetDataBuffer() const124 const void* RegistryValueImpl::GetDataBuffer() const
125 {
126     const void* pData = 0;
127 
128     if (REG_DWORD == m_Type)
129         pData = reinterpret_cast<const void*>(&m_IntData);
130     else if (REG_SZ == m_Type)
131         pData = reinterpret_cast<const void*>(m_StringData.c_str());
132 
133     return pData;
134 }
135 
136 //--------------------------------------------
137 /** Returns the data as string
138 */
GetDataAsUniString() const139 std::wstring RegistryValueImpl::GetDataAsUniString() const
140 {
141     assert(REG_SZ == m_Type);
142     return m_StringData;
143 }
144 
145 //--------------------------------------------
146 /** Returns the data as string
147 */
GetDataAsAnsiString() const148 std::string RegistryValueImpl::GetDataAsAnsiString() const
149 {
150     assert(REG_SZ == m_Type);
151     return UnicodeToAnsiString(m_StringData);
152 }
153 
154 //--------------------------------------------
155 /** Returns the data as number
156 */
GetDataAsInt() const157 int RegistryValueImpl::GetDataAsInt() const
158 {
159     assert(REG_DWORD == m_Type);
160     return m_IntData;
161 }
162 
163 //--------------------------------------------
164 /** Returns the type of the data
165 */
GetType() const166 int RegistryValueImpl::GetType() const
167 {
168     return m_Type;
169 }
170 
171 
172 //#################################
173 // Command
174 //#################################
175 
176 
177 //--------------------------------------------
178 /** Set a new name
179 */
SetName(const std::wstring & NewName)180 void RegistryValueImpl::SetName(const std::wstring& NewName)
181 {
182     m_Name = NewName;
183 }
184 
185 //--------------------------------------------
186 /**
187 */
SetValue(const std::wstring & NewValue)188 void RegistryValueImpl::SetValue(const std::wstring& NewValue)
189 {
190     m_Type = REG_SZ;
191     m_StringData = NewValue;
192 }
193 
194 //--------------------------------------------
195 /**
196 */
SetValue(const std::string & NewValue)197 void RegistryValueImpl::SetValue(const std::string& NewValue)
198 {
199     m_Type = REG_SZ;
200     m_StringData = AnsiToUnicodeString(NewValue);
201 }
202 
203 //--------------------------------------------
204 /**
205 */
SetValue(int NewValue)206 void RegistryValueImpl::SetValue(int NewValue)
207 {
208     m_Type = REG_DWORD;
209     m_IntData = NewValue;
210 }
211