1/*
2 * Copyright 2007-2013, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold <ingo_weinhold@gmx.de>
7 */
8#ifndef _B_DRIVER_SETTINGS_H
9#define _B_DRIVER_SETTINGS_H
10
11
12#include <SupportDefs.h>
13
14
15struct driver_parameter;
16struct driver_settings;
17struct entry_ref;
18
19
20namespace BPrivate {
21
22
23class BDriverParameter;
24class BDriverParameterContainer;
25
26
27class BDriverParameterIterator {
28public:
29								BDriverParameterIterator();
30								BDriverParameterIterator(
31									const BDriverParameterIterator& other);
32								~BDriverParameterIterator();
33
34			bool				HasNext() const;
35			BDriverParameter	Next();
36
37			BDriverParameterIterator& operator=(
38									const BDriverParameterIterator& other);
39
40private:
41			friend class BDriverParameterContainer;
42			class Delegate;
43
44private:
45								BDriverParameterIterator(Delegate* delegate);
46			void				_SetTo(Delegate* delegate, bool addReference);
47
48private:
49			Delegate*			fDelegate;
50};
51
52
53class BDriverParameterContainer {
54public:
55								BDriverParameterContainer();
56	virtual						~BDriverParameterContainer();
57
58			int32				CountParameters() const;
59			const driver_parameter*	Parameters() const;
60			BDriverParameter	ParameterAt(int32 index) const;
61			bool				FindParameter(const char* name,
62									BDriverParameter* _parameter) const;
63			BDriverParameter	GetParameter(const char* name) const;
64
65			BDriverParameterIterator ParameterIterator() const;
66			BDriverParameterIterator ParameterIterator(const char* name) const;
67
68			const char*			GetParameterValue(const char* name,
69									const char* unknownValue = NULL,
70									const char* noValue = NULL) const;
71			bool				GetBoolParameterValue(const char* name,
72									bool unknownValue = false,
73									bool noValue = false) const;
74			int32				GetInt32ParameterValue(const char* name,
75									int32 unknownValue = 0,
76									int32 noValue = 0) const;
77			int64				GetInt64ParameterValue(const char* name,
78									int64 unknownValue = 0,
79									int64 noValue = 0) const;
80
81protected:
82	virtual	const driver_parameter* GetParametersAndCount(int32& _count) const
83									= 0;
84
85private:
86			class Iterator;
87			class NameIterator;
88};
89
90
91class BDriverSettings : public BDriverParameterContainer {
92public:
93								BDriverSettings();
94	virtual						~BDriverSettings();
95
96			status_t			Load(const char* driverNameOrAbsolutePath);
97			status_t			Load(const entry_ref& ref);
98			status_t			SetToString(const char* string);
99			void				Unset();
100
101protected:
102	virtual	const driver_parameter* GetParametersAndCount(int32& _count) const;
103
104private:
105			void*				fSettingsHandle;
106			const driver_settings* fSettings;
107};
108
109
110class BDriverParameter : public BDriverParameterContainer {
111public:
112								BDriverParameter();
113								BDriverParameter(
114									const driver_parameter* parameter);
115								BDriverParameter(const BDriverParameter& other);
116	virtual						~BDriverParameter();
117
118			void				SetTo(const driver_parameter* parameter);
119
120			bool				IsValid() const;
121
122			const char*			Name() const;
123			int32				CountValues() const;
124			const char* const*	Values() const;
125			const char*			ValueAt(int32 index,
126									const char* noValue = NULL) const;
127			bool				BoolValueAt(int32 index,
128									bool noValue = false) const;
129			int32				Int32ValueAt(int32 index,
130									int32 noValue = 0) const;
131			int64				Int64ValueAt(int32 index,
132									int64 noValue = 0) const;
133
134			BDriverParameter&	operator=(const BDriverParameter& other);
135
136protected:
137	virtual	const driver_parameter* GetParametersAndCount(int32& _count) const;
138
139private:
140			const driver_parameter*	fParameter;
141};
142
143
144}	// namespace BPrivate
145
146
147using BPrivate::BDriverParameterIterator;
148using BPrivate::BDriverSettings;
149using BPrivate::BDriverParameter;
150
151
152#endif	// _B_DRIVER_SETTINGS_H
153