// DriverSettings.h #ifndef USERLAND_FS_DRIVER_SETTINGS_H #define USERLAND_FS_DRIVER_SETTINGS_H struct driver_parameter; struct driver_settings; namespace UserlandFSUtil { class DriverParameter; class DriverParameterContainer; // DriverParameterIterator class DriverParameterIterator { public: DriverParameterIterator(); DriverParameterIterator( const DriverParameterIterator& other); ~DriverParameterIterator(); bool HasNext() const; bool GetNext(DriverParameter* parameter); DriverParameterIterator& operator=( const DriverParameterIterator& other); private: friend class DriverParameterContainer; class Delegate; DriverParameterIterator(Delegate* delegate); void _SetTo(Delegate* delegate, bool addReference); Delegate* fDelegate; }; // DriverParameterContainer class DriverParameterContainer { public: DriverParameterContainer(); virtual ~DriverParameterContainer(); int32 CountParameters() const; const driver_parameter* GetParameters() const; bool GetParameterAt(int32 index, DriverParameter* parameter) const; bool FindParameter(const char* name, DriverParameter* parameter) const; DriverParameterIterator GetParameterIterator() const; DriverParameterIterator GetParameterIterator( const char* name) const; const char* GetParameterValue(const char* name, const char* unknownValue = NULL, const char* noValue = NULL) const; bool GetBoolParameterValue(const char* name, bool unknownValue = false, bool noValue = false) const; int32 GetInt32ParameterValue(const char* name, int32 unknownValue = 0, int32 noValue = 0) const; int64 GetInt64ParameterValue(const char* name, int64 unknownValue = 0, int64 noValue = 0) const; protected: virtual const driver_parameter* GetParametersAndCount(int32* count) const = 0; private: class Iterator; class NameIterator; }; // DriverSettings class DriverSettings : public DriverParameterContainer { public: DriverSettings(); virtual ~DriverSettings(); status_t Load(const char* driverName); void Unset(); protected: virtual const driver_parameter* GetParametersAndCount(int32* count) const; private: void* fSettingsHandle; const driver_settings* fSettings; }; // DriverParameter class DriverParameter : public DriverParameterContainer { public: DriverParameter(); virtual ~DriverParameter(); void SetTo(const driver_parameter* parameter); const char* GetName() const; int32 CountValues() const; const char* const* GetValues() const; const char* ValueAt(int32 index, const char* noValue = NULL) const; bool BoolValueAt(int32 index, bool noValue = false) const; int32 Int32ValueAt(int32 index, int32 noValue = 0) const; int64 Int64ValueAt(int32 index, int64 noValue = 0) const; protected: virtual const driver_parameter* GetParametersAndCount(int32* count) const; private: const driver_parameter* fParameter; }; } // namespace UserlandFSUtil using UserlandFSUtil::DriverParameterIterator; using UserlandFSUtil::DriverParameterContainer; using UserlandFSUtil::DriverSettings; using UserlandFSUtil::DriverParameter; #endif // USERLAND_FS_DRIVER_SETTINGS_H