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