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