From f0bc03121247c94e0caa87cf482c1253ff5c3fee Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 8 Feb 2003 23:32:51 +0000 Subject: [PATCH] Added DiskDevicePrivate.{h,cpp}, which contains the internally used iteration support classes. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2665 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/storage/DiskDevicePrivate.h | 55 +++++++++++++++ src/kits/storage/DiskDevicePrivate.cpp | 75 +++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 headers/private/storage/DiskDevicePrivate.h create mode 100644 src/kits/storage/DiskDevicePrivate.cpp diff --git a/headers/private/storage/DiskDevicePrivate.h b/headers/private/storage/DiskDevicePrivate.h new file mode 100644 index 0000000000..982be864da --- /dev/null +++ b/headers/private/storage/DiskDevicePrivate.h @@ -0,0 +1,55 @@ +//---------------------------------------------------------------------- +// This software is part of the OpenBeOS distribution and is covered +// by the OpenBeOS license. +//--------------------------------------------------------------------- + +#ifndef _DISK_DEVICE_PRIVATE_H +#define _DISK_DEVICE_PRIVATE_H + +#include +#include + +namespace BPrivate { + +// PartitionFilter +class PartitionFilter { +public: + virtual bool Filter(BPartition *partition) = 0; +}; + +// PartitionFilterVisitor +class PartitionFilterVisitor : public BDiskDeviceVisitor { +public: + PartitionFilterVisitor(BDiskDeviceVisitor *visitor, + PartitionFilter *filter); + + virtual bool Visit(BDiskDevice *device); + virtual bool Visit(BSession *session); + virtual bool Visit(BPartition *partition); + +private: + BDiskDeviceVisitor *fVisitor; + PartitionFilter *fFilter; +}; + +// IDFinderVisitor +class IDFinderVisitor : public BDiskDeviceVisitor { +public: + IDFinderVisitor(int32 id); + + virtual bool Visit(BDiskDevice *device); + virtual bool Visit(BSession *session); + virtual bool Visit(BPartition *partition); + +private: + int32 fID; +}; + +} // namespace BPrivate + +using BPrivate::PartitionFilter; +using BPrivate::PartitionFilterVisitor; +using BPrivate::IDFinderVisitor; + + +#endif // _DISK_DEVICE_PRIVATE_H diff --git a/src/kits/storage/DiskDevicePrivate.cpp b/src/kits/storage/DiskDevicePrivate.cpp new file mode 100644 index 0000000000..d77f79eacf --- /dev/null +++ b/src/kits/storage/DiskDevicePrivate.cpp @@ -0,0 +1,75 @@ +//---------------------------------------------------------------------- +// This software is part of the OpenBeOS distribution and is covered +// by the OpenBeOS license. +//--------------------------------------------------------------------- + +#include +#include +#include +#include + +// PartitionFilterVisitor + +// constructor +PartitionFilterVisitor::PartitionFilterVisitor(BDiskDeviceVisitor *visitor, + PartitionFilter *filter) + : BDiskDeviceVisitor(), + fVisitor(visitor), + fFilter(filter) +{ +} + +// Visit +bool +PartitionFilterVisitor::Visit(BDiskDevice *device) +{ + return false; +} + +// Visit +bool +PartitionFilterVisitor::Visit(BSession *session) +{ + return false; +} + +// Visit +bool +PartitionFilterVisitor::Visit(BPartition *partition) +{ + if (fFilter->Filter(partition)) + return fVisitor->Visit(partition); + return false; +} + + +// IDFinderVisitor + +// constructor +IDFinderVisitor::IDFinderVisitor(int32 id) + : BDiskDeviceVisitor(), + fID(id) +{ +} + +// Visit +bool +IDFinderVisitor::Visit(BDiskDevice *device) +{ + return (device->UniqueID() == fID); +} + +// Visit +bool +IDFinderVisitor::Visit(BSession *session) +{ + return (session->UniqueID() == fID); +} + +// Visit +bool +IDFinderVisitor::Visit(BPartition *partition) +{ + return (partition->UniqueID() == fID); +} +