#ifndef __DEV_DEVICENODE_H
#define __DEV_DEVICENODE_H

#include <cpp/Uncopyable.h>
#include <List.h>
#include <os/Mutex.h>

namespace OS {
namespace Dev {

class DeviceNode : private Uncopyable {
public:
	DeviceNode(const char *name);
	virtual ~DeviceNode();

	// device info
	const char *Name() { return mName; }
	status_t Path(char path[], size_t pathlen);
	DeviceNode *Parent() { return mParent; }
	DeviceNode *NextSibling();

	// device list maintenance
	void SetParent(DeviceNode *parent);
	void AddChild(DeviceNode *child);

private:
	const char *mName;
	DeviceNode *mParent;
	ListNode<DeviceNode> mParentListNode;
	List<DeviceNode> mChildren;

	static Mutex sTreeLock;
};

}}; // namespace OS::Dev

#endif

