Blame lib/DescriptorManager.cxx

Packit 8a864e
// Copyright (c) 1994 James Clark
Packit 8a864e
// See the file COPYING for copying permission.
Packit 8a864e
Packit 8a864e
#include "splib.h"
Packit 8a864e
#include "DescriptorManager.h"
Packit 8a864e
#include "ListIter.h"
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
namespace SP_NAMESPACE {
Packit 8a864e
#endif
Packit 8a864e
Packit 8a864e
DescriptorUser::DescriptorUser(DescriptorManager *manager)
Packit 8a864e
: manager_(manager)
Packit 8a864e
{
Packit 8a864e
  if (manager_)
Packit 8a864e
    manager_->addUser(this);
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
DescriptorUser::~DescriptorUser()
Packit 8a864e
{
Packit 8a864e
  if (manager_)
Packit 8a864e
    manager_->removeUser(this);
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorUser::managerDeleted()
Packit 8a864e
{
Packit 8a864e
  manager_ = 0;
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
Boolean DescriptorUser::suspend()
Packit 8a864e
{
Packit 8a864e
  return 0;
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorUser::acquireD()
Packit 8a864e
{
Packit 8a864e
  if (manager_)
Packit 8a864e
    manager_->acquireD();
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorUser::releaseD()
Packit 8a864e
{
Packit 8a864e
  if (manager_)
Packit 8a864e
    manager_->releaseD();
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
DescriptorManager::DescriptorManager(int maxD)
Packit 8a864e
: maxD_(maxD), usedD_(0)
Packit 8a864e
{
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
DescriptorManager::~DescriptorManager()
Packit 8a864e
{
Packit 8a864e
  for (ListIter<DescriptorUser *> iter(users_);
Packit 8a864e
       !iter.done();
Packit 8a864e
       iter.next())
Packit 8a864e
    iter.cur()->managerDeleted();
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorManager::addUser(DescriptorUser *p)
Packit 8a864e
{
Packit 8a864e
  users_.insert(p);
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorManager::removeUser(DescriptorUser *p)
Packit 8a864e
{
Packit 8a864e
  users_.remove(p);
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorManager::acquireD()
Packit 8a864e
{
Packit 8a864e
  if (usedD_ >= maxD_) {
Packit 8a864e
    for (ListIter<DescriptorUser *> iter(users_);
Packit 8a864e
	 !iter.done();
Packit 8a864e
	 iter.next()) {
Packit 8a864e
      if (iter.cur()->suspend())
Packit 8a864e
	break;
Packit 8a864e
    }
Packit 8a864e
  }
Packit 8a864e
  usedD_++;
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
void DescriptorManager::releaseD()
Packit 8a864e
{
Packit 8a864e
  usedD_--;
Packit 8a864e
}
Packit 8a864e
Packit 8a864e
#ifdef SP_NAMESPACE
Packit 8a864e
}
Packit 8a864e
#endif