xref: /haiku/headers/os/storage/ResourceStrings.h (revision f46308c92afac150a48e75fbcc52c2a1436b43ff)
1*f46308c9SAxel Dörfler /*
2*f46308c9SAxel Dörfler  * Copyright 2001-2010, Haiku Inc.
3*f46308c9SAxel Dörfler  * Distributed under the terms of the MIT License.
452a38012Sejakowatz  */
582b75665STyler Dauwalder #ifndef _RESOURCE_STRINGS_H
682b75665STyler Dauwalder #define _RESOURCE_STRINGS_H
752a38012Sejakowatz 
8*f46308c9SAxel Dörfler 
952a38012Sejakowatz #include <Entry.h>
1052a38012Sejakowatz #include <Locker.h>
1152a38012Sejakowatz 
12*f46308c9SAxel Dörfler 
1352a38012Sejakowatz class BResources;
1452a38012Sejakowatz class BString;
1552a38012Sejakowatz 
16*f46308c9SAxel Dörfler 
17*f46308c9SAxel Dörfler /*!	\brief Simple class to access the string resources in a file.
1852a38012Sejakowatz 
1952a38012Sejakowatz 	A BResourceStrings object reads the string type resources from a given
2052a38012Sejakowatz 	resource file and provides fast read only access to them.
2152a38012Sejakowatz */
2252a38012Sejakowatz class BResourceStrings {
2352a38012Sejakowatz public:
2452a38012Sejakowatz 								BResourceStrings();
2552a38012Sejakowatz 								BResourceStrings(const entry_ref& ref);
2652a38012Sejakowatz 	virtual						~BResourceStrings();
2752a38012Sejakowatz 
2852a38012Sejakowatz 			status_t			InitCheck();
2952a38012Sejakowatz 	virtual BString*			NewString(int32 id);
3052a38012Sejakowatz 	virtual const char*			FindString(int32 id);
3152a38012Sejakowatz 
3252a38012Sejakowatz 	virtual status_t			SetStringFile(const entry_ref* ref);
3352a38012Sejakowatz 			status_t			GetStringFile(entry_ref* outRef);
3452a38012Sejakowatz 
3552a38012Sejakowatz 			enum {
3652a38012Sejakowatz 				RESOURCE_TYPE = 'CSTR'
3752a38012Sejakowatz 			};
3852a38012Sejakowatz 
3952a38012Sejakowatz protected:
4052a38012Sejakowatz 			struct _string_id_hash {
4152a38012Sejakowatz 				_string_id_hash();
4252a38012Sejakowatz 				~_string_id_hash();
43*f46308c9SAxel Dörfler 
4452a38012Sejakowatz 				void			assign_string(const char* str, bool makeCopy);
45*f46308c9SAxel Dörfler 
4652a38012Sejakowatz 				_string_id_hash* next;
4752a38012Sejakowatz 				int32			id;
4852a38012Sejakowatz 				char*			data;
4952a38012Sejakowatz 				bool 			data_alloced;
5052a38012Sejakowatz 				bool			_reserved1[3];
5152a38012Sejakowatz 				uint32			_reserved2;
5252a38012Sejakowatz 			};
5352a38012Sejakowatz 
54*f46308c9SAxel Dörfler private:
55*f46308c9SAxel Dörfler 			void				_Cleanup();
56*f46308c9SAxel Dörfler 			void				_MakeEmpty();
57*f46308c9SAxel Dörfler 			status_t			_Rehash(int32 newSize);
58*f46308c9SAxel Dörfler 			_string_id_hash*	_AddString(char* str, int32 id,
59*f46308c9SAxel Dörfler 									bool wasMalloced);
60*f46308c9SAxel Dörfler 
61*f46308c9SAxel Dörfler 	virtual _string_id_hash*	_FindString(int32 id);
62*f46308c9SAxel Dörfler 
63*f46308c9SAxel Dörfler 	virtual	status_t			_Reserved_ResourceStrings_0(void*);
64*f46308c9SAxel Dörfler 	virtual	status_t			_Reserved_ResourceStrings_1(void*);
65*f46308c9SAxel Dörfler 	virtual	status_t			_Reserved_ResourceStrings_2(void*);
66*f46308c9SAxel Dörfler 	virtual	status_t			_Reserved_ResourceStrings_3(void*);
67*f46308c9SAxel Dörfler 	virtual	status_t			_Reserved_ResourceStrings_4(void*);
68*f46308c9SAxel Dörfler 	virtual	status_t			_Reserved_ResourceStrings_5(void*);
69*f46308c9SAxel Dörfler 
7052a38012Sejakowatz protected:
7152a38012Sejakowatz 			BLocker				_string_lock;
7252a38012Sejakowatz 			status_t			_init_error;
7352a38012Sejakowatz 
7452a38012Sejakowatz private:
7552a38012Sejakowatz 			entry_ref		fFileRef;
7652a38012Sejakowatz 			BResources		*fResources;
7752a38012Sejakowatz 			_string_id_hash	**fHashTable;
7852a38012Sejakowatz 			int32			fHashTableSize;
7952a38012Sejakowatz 			int32			fStringCount;
8052a38012Sejakowatz 			uint32			_reserved[16];	// FBC
8152a38012Sejakowatz };
8252a38012Sejakowatz 
83*f46308c9SAxel Dörfler 
8482b75665STyler Dauwalder #endif	// _RESOURCE_STRINGS_H
8509d84e61STyler Dauwalder 
8609d84e61STyler Dauwalder 
87