1/*
2 * Copyright 2007, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6#include "DiskDeviceJobQueue.h"
7
8#include <stdio.h>
9
10#include <typeinfo>
11
12#include "DiskDeviceJob.h"
13
14
15#undef TRACE
16//#define TRACE(x...)
17#define TRACE(x...)	printf(x)
18
19
20// constructor
21DiskDeviceJobQueue::DiskDeviceJobQueue()
22	: fJobs(20, true)
23{
24}
25
26
27// destructor
28DiskDeviceJobQueue::~DiskDeviceJobQueue()
29{
30}
31
32
33// AddJob
34status_t
35DiskDeviceJobQueue::AddJob(DiskDeviceJob* job)
36{
37	if (!job)
38		return B_BAD_VALUE;
39
40	return fJobs.AddItem(job) ? B_OK : B_NO_MEMORY;
41}
42
43
44// Execute
45status_t
46DiskDeviceJobQueue::Execute()
47{
48	int32 count = fJobs.CountItems();
49	for (int32 i = 0; i < count; i++) {
50		DiskDeviceJob* job = fJobs.ItemAt(i);
51
52		TRACE("DiskDeviceJobQueue::Execute(): executing job: %s\n",
53			typeid(*job).name());
54
55		status_t error = job->Do();
56		if (error != B_OK) {
57			TRACE("DiskDeviceJobQueue::Execute(): executing job failed\n");
58			return error;
59		}
60	}
61
62	return B_OK;
63}
64