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