1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef TYPE_HANDLER_ROSTER_H
6#define TYPE_HANDLER_ROSTER_H
7
8
9#include <Locker.h>
10#include <ObjectList.h>
11
12
13class Type;
14class TypeHandler;
15class ValueNode;
16class ValueNodeChild;
17
18
19typedef BObjectList<TypeHandler> TypeHandlerList;
20
21
22class TypeHandlerRoster {
23public:
24								TypeHandlerRoster();
25								~TypeHandlerRoster();
26
27	static	TypeHandlerRoster*	Default();
28	static	status_t			CreateDefault();
29	static	void				DeleteDefault();
30
31			status_t			Init();
32			status_t			RegisterDefaultHandlers();
33
34			status_t			FindTypeHandler(ValueNodeChild* nodeChild,
35									Type* type, TypeHandler*& _handler);
36									// returns a reference
37			status_t			CreateValueNode(ValueNodeChild* nodeChild,
38									Type* type, ValueNode*& _node);
39									// returns a reference
40
41			bool				RegisterHandler(TypeHandler* handler);
42			void				UnregisterHandler(TypeHandler* handler);
43
44private:
45			BLocker				fLock;
46			TypeHandlerList		fTypeHandlers;
47	static	TypeHandlerRoster*	sDefaultInstance;
48};
49
50
51#endif	// TYPE_HANDLER_ROSTER_H
52