3065 some functions in the tcp module can be static
[unleashed.git] / usr / src / cmd / man / src / util / nsgmls.src / lib / DescriptorManager.cxx
blob2fd62b8f7f516a9bdca01eb7bf525b087462ee26
1 // Copyright (c) 1994 James Clark
2 // See the file COPYING for copying permission.
3 #pragma ident "%Z%%M% %I% %E% SMI"
5 #include "splib.h"
6 #include "DescriptorManager.h"
7 #include "ListIter.h"
9 #ifdef SP_NAMESPACE
10 namespace SP_NAMESPACE {
11 #endif
13 DescriptorUser::DescriptorUser(DescriptorManager *manager)
14 : manager_(manager)
16 if (manager_)
17 manager_->addUser(this);
20 DescriptorUser::~DescriptorUser()
22 if (manager_)
23 manager_->removeUser(this);
26 void DescriptorUser::managerDeleted()
28 manager_ = 0;
31 Boolean DescriptorUser::suspend()
33 return 0;
36 void DescriptorUser::acquireD()
38 if (manager_)
39 manager_->acquireD();
42 void DescriptorUser::releaseD()
44 if (manager_)
45 manager_->releaseD();
48 DescriptorManager::DescriptorManager(int maxD)
49 : maxD_(maxD), usedD_(0)
53 DescriptorManager::~DescriptorManager()
55 for (ListIter<DescriptorUser *> iter(users_);
56 !iter.done();
57 iter.next())
58 iter.cur()->managerDeleted();
61 void DescriptorManager::addUser(DescriptorUser *p)
63 users_.insert(p);
66 void DescriptorManager::removeUser(DescriptorUser *p)
68 users_.remove(p);
71 void DescriptorManager::acquireD()
73 if (usedD_ >= maxD_) {
74 for (ListIter<DescriptorUser *> iter(users_);
75 !iter.done();
76 iter.next()) {
77 if (iter.cur()->suspend())
78 break;
81 usedD_++;
84 void DescriptorManager::releaseD()
86 usedD_--;
89 #ifdef SP_NAMESPACE
91 #endif