xref: /haiku/headers/os/storage/ResourceStrings.h (revision 82b7566525184ba7b76dda94b7ad469a7a65b04c)
152a38012Sejakowatz //----------------------------------------------------------------------
252a38012Sejakowatz //  This software is part of the OpenBeOS distribution and is covered
352a38012Sejakowatz //  by the OpenBeOS license.
452a38012Sejakowatz //---------------------------------------------------------------------
552a38012Sejakowatz /*!
652a38012Sejakowatz 	\file ResourceStrings.h
752a38012Sejakowatz 	BResourceStrings interface declaration.
852a38012Sejakowatz */
952a38012Sejakowatz 
10*82b75665STyler Dauwalder #ifndef _RESOURCE_STRINGS_H
11*82b75665STyler Dauwalder #define _RESOURCE_STRINGS_H
1252a38012Sejakowatz 
1352a38012Sejakowatz #include <Entry.h>
1452a38012Sejakowatz #include <Locker.h>
1552a38012Sejakowatz 
1652a38012Sejakowatz class BResources;
1752a38012Sejakowatz class BString;
1852a38012Sejakowatz 
1952a38012Sejakowatz /*!
2052a38012Sejakowatz 	\class BResourceStrings
2152a38012Sejakowatz 	\brief Simple class to access the string resources in a file.
2252a38012Sejakowatz 
2352a38012Sejakowatz 	A BResourceStrings object reads the string type resources from a given
2452a38012Sejakowatz 	resource file and provides fast read only access to them.
2552a38012Sejakowatz 
2652a38012Sejakowatz 	\author <a href='mailto:bonefish@users.sf.net'>Ingo Weinhold</a>
2752a38012Sejakowatz 
2852a38012Sejakowatz 	\version 0.0.0
2952a38012Sejakowatz */
3052a38012Sejakowatz class BResourceStrings {
3152a38012Sejakowatz public:
3252a38012Sejakowatz 	BResourceStrings();
3352a38012Sejakowatz 	BResourceStrings(const entry_ref &ref);
3452a38012Sejakowatz 	virtual ~BResourceStrings();
3552a38012Sejakowatz 
3652a38012Sejakowatz 	status_t InitCheck();
3752a38012Sejakowatz 	virtual BString *NewString(int32 id);
3852a38012Sejakowatz 	virtual const char *FindString(int32 id);
3952a38012Sejakowatz 
4052a38012Sejakowatz 	virtual status_t SetStringFile(const entry_ref *ref);
4152a38012Sejakowatz 	status_t GetStringFile(entry_ref *outRef);
4252a38012Sejakowatz 
4352a38012Sejakowatz public:
4452a38012Sejakowatz 	enum {
4552a38012Sejakowatz 		RESOURCE_TYPE = 'CSTR'
4652a38012Sejakowatz 	};
4752a38012Sejakowatz 
4852a38012Sejakowatz protected:
4952a38012Sejakowatz 	struct _string_id_hash {
5052a38012Sejakowatz 		_string_id_hash();
5152a38012Sejakowatz 		~_string_id_hash();
5252a38012Sejakowatz 		void assign_string(const char *str, bool makeCopy);
5352a38012Sejakowatz 		_string_id_hash *next;
5452a38012Sejakowatz 		int32	id;
5552a38012Sejakowatz 		char	*data;
5652a38012Sejakowatz 		bool 	data_alloced;
5752a38012Sejakowatz 		bool	_reserved1[3];
5852a38012Sejakowatz 		uint32	_reserved2;
5952a38012Sejakowatz 	};
6052a38012Sejakowatz 
6152a38012Sejakowatz protected:
6252a38012Sejakowatz 	BLocker		_string_lock;
6352a38012Sejakowatz 	status_t	_init_error;
6452a38012Sejakowatz 
6552a38012Sejakowatz private:
6652a38012Sejakowatz 	entry_ref		fFileRef;
6752a38012Sejakowatz 	BResources		*fResources;
6852a38012Sejakowatz 	_string_id_hash	**fHashTable;
6952a38012Sejakowatz 	int32			fHashTableSize;
7052a38012Sejakowatz 	int32			fStringCount;
7152a38012Sejakowatz 	uint32			_reserved[16];	// FBC
7252a38012Sejakowatz 
7352a38012Sejakowatz private:
7452a38012Sejakowatz 	void _Cleanup();
7552a38012Sejakowatz 	void _MakeEmpty();
7652a38012Sejakowatz 	status_t _Rehash(int32 newSize);
7752a38012Sejakowatz 	_string_id_hash *_AddString(char *str, int32 id, bool wasMalloced);
7852a38012Sejakowatz 
7952a38012Sejakowatz 	virtual _string_id_hash *_FindString(int32 id);
8052a38012Sejakowatz 
8152a38012Sejakowatz 	// FBC
8252a38012Sejakowatz 	virtual	void _ReservedResourceStrings0();
8352a38012Sejakowatz 	virtual	void _ReservedResourceStrings1();
8452a38012Sejakowatz 	virtual	void _ReservedResourceStrings2();
8552a38012Sejakowatz 	virtual	void _ReservedResourceStrings3();
8652a38012Sejakowatz 	virtual	void _ReservedResourceStrings4();
8752a38012Sejakowatz 	virtual	void _ReservedResourceStrings5();
8852a38012Sejakowatz };
8952a38012Sejakowatz 
90*82b75665STyler Dauwalder #endif	// _RESOURCE_STRINGS_H
91