xref: /haiku/headers/os/storage/ResourceStrings.h (revision e81a954787e50e56a7f06f72705b7859b6ab06d1)
1 /*
2  * Copyright 2001-2010, Haiku Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _RESOURCE_STRINGS_H
6 #define _RESOURCE_STRINGS_H
7 
8 
9 #include <Entry.h>
10 #include <Locker.h>
11 
12 
13 class BResources;
14 class BString;
15 
16 
17 /*!	\brief Simple class to access the string resources in a file.
18 
19 	A BResourceStrings object reads the string type resources from a given
20 	resource file and provides fast read only access to them.
21 */
22 class BResourceStrings {
23 public:
24 								BResourceStrings();
25 								BResourceStrings(const entry_ref& ref);
26 	virtual						~BResourceStrings();
27 
28 			status_t			InitCheck();
29 	virtual BString*			NewString(int32 id);
30 	virtual const char*			FindString(int32 id);
31 
32 	virtual status_t			SetStringFile(const entry_ref* ref);
33 			status_t			GetStringFile(entry_ref* outRef);
34 
35 			enum {
36 				RESOURCE_TYPE = 'CSTR'
37 			};
38 
39 protected:
40 			struct _string_id_hash {
41 				_string_id_hash();
42 				~_string_id_hash();
43 
44 				void			assign_string(const char* str, bool makeCopy);
45 
46 				_string_id_hash* next;
47 				int32			id;
48 				char*			data;
49 				bool 			data_alloced;
50 				bool			_reserved1[3];
51 				uint32			_reserved2;
52 			};
53 
54 private:
55 			void				_Cleanup();
56 			void				_MakeEmpty();
57 			status_t			_Rehash(int32 newSize);
58 			_string_id_hash*	_AddString(char* str, int32 id,
59 									bool wasMalloced);
60 
61 	virtual _string_id_hash*	_FindString(int32 id);
62 
63 	virtual	status_t			_Reserved_ResourceStrings_0(void*);
64 	virtual	status_t			_Reserved_ResourceStrings_1(void*);
65 	virtual	status_t			_Reserved_ResourceStrings_2(void*);
66 	virtual	status_t			_Reserved_ResourceStrings_3(void*);
67 	virtual	status_t			_Reserved_ResourceStrings_4(void*);
68 	virtual	status_t			_Reserved_ResourceStrings_5(void*);
69 
70 protected:
71 			BLocker				_string_lock;
72 			status_t			_init_error;
73 
74 private:
75 			entry_ref		fFileRef;
76 			BResources		*fResources;
77 			_string_id_hash	**fHashTable;
78 			int32			fHashTableSize;
79 			int32			fStringCount;
80 			uint32			_reserved[16];	// FBC
81 };
82 
83 
84 #endif	// _RESOURCE_STRINGS_H
85 
86 
87