xref: /aoo4110/main/registry/source/regimpl.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _REGIMPL_HXX_
25*b1cdbd2cSJim Jagielski #define _REGIMPL_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <set>
28*b1cdbd2cSJim Jagielski #include <hash_map>
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski #include 	<registry/registry.h>
31*b1cdbd2cSJim Jagielski #include	<rtl/ustring.hxx>
32*b1cdbd2cSJim Jagielski #include	<osl/mutex.hxx>
33*b1cdbd2cSJim Jagielski #include	<store/store.hxx>
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #define REG_PAGESIZE 512
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #define	REG_MODE_CREATE		store_AccessCreate
38*b1cdbd2cSJim Jagielski #define	REG_MODE_OPEN		store_AccessReadWrite
39*b1cdbd2cSJim Jagielski #define	REG_MODE_OPENREAD	store_AccessReadOnly
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #define	KEY_MODE_CREATE		store_AccessCreate
42*b1cdbd2cSJim Jagielski #define	KEY_MODE_OPEN		store_AccessReadWrite
43*b1cdbd2cSJim Jagielski #define	KEY_MODE_OPENREAD	store_AccessReadOnly
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #define	VALUE_MODE_CREATE	store_AccessCreate
47*b1cdbd2cSJim Jagielski #define	VALUE_MODE_OPEN		store_AccessReadWrite
48*b1cdbd2cSJim Jagielski #define	VALUE_MODE_OPENREAD	store_AccessReadOnly
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski // 5 Bytes = 1 (Byte fuer den Typ) + 4 (Bytes fuer die Groesse der Daten)
51*b1cdbd2cSJim Jagielski #define	VALUE_HEADERSIZE	5
52*b1cdbd2cSJim Jagielski #define	VALUE_TYPEOFFSET	1
53*b1cdbd2cSJim Jagielski #define	VALUE_HEADEROFFSET	5
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski #define REG_CREATE  	0x0004  // allow write accesses
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski #define REG_GUARD(mutex) \
58*b1cdbd2cSJim Jagielski 	osl::Guard< osl::Mutex > aGuard( mutex );
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski // @@@ using namespace rtl;
61*b1cdbd2cSJim Jagielski // @@@ using namespace osl;
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski class ORegKey;
64*b1cdbd2cSJim Jagielski class RegistryTypeReader;
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski class ORegistry
67*b1cdbd2cSJim Jagielski {
68*b1cdbd2cSJim Jagielski public:
69*b1cdbd2cSJim Jagielski 	ORegistry();
70*b1cdbd2cSJim Jagielski 
acquire()71*b1cdbd2cSJim Jagielski 	sal_uInt32	acquire()
72*b1cdbd2cSJim Jagielski 		{ return ++m_refCount; }
73*b1cdbd2cSJim Jagielski 
release()74*b1cdbd2cSJim Jagielski 	sal_uInt32	release()
75*b1cdbd2cSJim Jagielski 		{ return --m_refCount; }
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski 	RegError	initRegistry(const rtl::OUString& name,
78*b1cdbd2cSJim Jagielski 							 RegAccessMode accessMode);
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 	RegError	closeRegistry();
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 	RegError	destroyRegistry(const rtl::OUString& name);
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 	RegError	acquireKey(RegKeyHandle hKey);
85*b1cdbd2cSJim Jagielski 	RegError	releaseKey(RegKeyHandle hKey);
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 	RegError	createKey(RegKeyHandle hKey,
88*b1cdbd2cSJim Jagielski 						  const rtl::OUString& keyName,
89*b1cdbd2cSJim Jagielski 						  RegKeyHandle* phNewKey);
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 	RegError	openKey(RegKeyHandle hKey,
92*b1cdbd2cSJim Jagielski 						const rtl::OUString& keyName,
93*b1cdbd2cSJim Jagielski 						RegKeyHandle* phOpenKey);
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 	RegError	closeKey(RegKeyHandle hKey);
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 	RegError	deleteKey(RegKeyHandle hKey, const rtl::OUString& keyName);
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	RegError	loadKey(RegKeyHandle hKey,
100*b1cdbd2cSJim Jagielski 						const rtl::OUString& regFileName,
101*b1cdbd2cSJim Jagielski 						sal_Bool bWarings=sal_False,
102*b1cdbd2cSJim Jagielski 						sal_Bool bReport=sal_False);
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 	RegError	saveKey(RegKeyHandle hKey,
105*b1cdbd2cSJim Jagielski 						const rtl::OUString& regFileName,
106*b1cdbd2cSJim Jagielski 						sal_Bool bWarings=sal_False,
107*b1cdbd2cSJim Jagielski 						sal_Bool bReport=sal_False);
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 	RegError	dumpRegistry(RegKeyHandle hKey) const;
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski     ~ORegistry();
112*b1cdbd2cSJim Jagielski 
isReadOnly() const113*b1cdbd2cSJim Jagielski 	sal_Bool			isReadOnly() const
114*b1cdbd2cSJim Jagielski 		{ return m_readOnly; }
115*b1cdbd2cSJim Jagielski 
isOpen() const116*b1cdbd2cSJim Jagielski 	sal_Bool			isOpen() const
117*b1cdbd2cSJim Jagielski 		{ return m_isOpen; }
118*b1cdbd2cSJim Jagielski 
119*b1cdbd2cSJim Jagielski 	ORegKey* 	getRootKey();
120*b1cdbd2cSJim Jagielski 
getStoreFile()121*b1cdbd2cSJim Jagielski 	const store::OStoreFile& getStoreFile()
122*b1cdbd2cSJim Jagielski 		{ return m_file; }
123*b1cdbd2cSJim Jagielski 
getName() const124*b1cdbd2cSJim Jagielski 	const rtl::OUString& 	getName() const
125*b1cdbd2cSJim Jagielski 		{ return m_name; }
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 	friend class ORegKey;
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski private:
130*b1cdbd2cSJim Jagielski 	RegError	eraseKey(ORegKey* pKey, const rtl::OUString& keyName);
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 	RegError	deleteSubkeysAndValues(ORegKey* pKey);
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 	RegError	loadAndSaveValue(ORegKey* pTargetKey,
135*b1cdbd2cSJim Jagielski 								 ORegKey* pSourceKey,
136*b1cdbd2cSJim Jagielski 								 const rtl::OUString& valueName,
137*b1cdbd2cSJim Jagielski 								 sal_uInt32 nCut,
138*b1cdbd2cSJim Jagielski 								 sal_Bool bWarnings=sal_False,
139*b1cdbd2cSJim Jagielski 								 sal_Bool bReport=sal_False);
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 	RegError	checkBlop(store::OStoreStream& rValue,
142*b1cdbd2cSJim Jagielski 						  const rtl::OUString& sTargetPath,
143*b1cdbd2cSJim Jagielski 						  sal_uInt32 srcValueSize,
144*b1cdbd2cSJim Jagielski 						  sal_uInt8* pSrcBuffer,
145*b1cdbd2cSJim Jagielski 						  sal_Bool bReport=sal_False);
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski 	RegError	mergeModuleValue(store::OStoreStream& rTargetValue,
148*b1cdbd2cSJim Jagielski 								 RegistryTypeReader& reader,
149*b1cdbd2cSJim Jagielski 								 RegistryTypeReader& reader2);
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 	RegError	loadAndSaveKeys(ORegKey* pTargetKey,
152*b1cdbd2cSJim Jagielski 								ORegKey* pSourceKey,
153*b1cdbd2cSJim Jagielski 								const rtl::OUString& keyName,
154*b1cdbd2cSJim Jagielski 								sal_uInt32 nCut,
155*b1cdbd2cSJim Jagielski 								sal_Bool bWarnings=sal_False,
156*b1cdbd2cSJim Jagielski 								sal_Bool bReport=sal_False);
157*b1cdbd2cSJim Jagielski 
158*b1cdbd2cSJim Jagielski 	RegError	dumpValue(const rtl::OUString& sPath,
159*b1cdbd2cSJim Jagielski 						  const rtl::OUString& sName,
160*b1cdbd2cSJim Jagielski 						  sal_Int16 nSpace) const;
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 	RegError	dumpKey(const rtl::OUString& sPath,
163*b1cdbd2cSJim Jagielski 						const rtl::OUString& sName,
164*b1cdbd2cSJim Jagielski 						sal_Int16 nSpace) const;
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski     typedef	std::hash_map< rtl::OUString, ORegKey*, rtl::OUStringHash > KeyMap;
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 	sal_uInt32 		m_refCount;
169*b1cdbd2cSJim Jagielski 	osl::Mutex	    	m_mutex;
170*b1cdbd2cSJim Jagielski 	sal_Bool   		m_readOnly;
171*b1cdbd2cSJim Jagielski 	sal_Bool   		m_isOpen;
172*b1cdbd2cSJim Jagielski 	rtl::OUString   	m_name;
173*b1cdbd2cSJim Jagielski 	store::OStoreFile 	m_file;
174*b1cdbd2cSJim Jagielski 	KeyMap	   		m_openKeyTable;
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 	const rtl::OUString ROOT;
177*b1cdbd2cSJim Jagielski };
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski #endif
180*b1cdbd2cSJim Jagielski 
181