xref: /haiku/src/servers/print/ResourceManager.h (revision 51978af14a173e7fae0563b562be5603bc652aeb)
1 /*****************************************************************************/
2 // ResourceManager
3 //
4 // Author
5 //   Michael Pfeiffer
6 //
7 // This application and all source files used in its construction, except
8 // where noted, are licensed under the MIT License, and have been written
9 // and are:
10 //
11 // Copyright (c) 2002 OpenBeOS Project
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining a
14 // copy of this software and associated documentation files (the "Software"),
15 // to deal in the Software without restriction, including without limitation
16 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 // and/or sell copies of the Software, and to permit persons to whom the
18 // Software is furnished to do so, subject to the following conditions:
19 //
20 // The above copyright notice and this permission notice shall be included
21 // in all copies or substantial portions of the Software.
22 //
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
29 // DEALINGS IN THE SOFTWARE.
30 /*****************************************************************************/
31 
32 
33 #ifndef RESOURCE_MANAGER_H
34 #define RESOURCE_MANAGER_H
35 
36 #include "ObjectList.h"
37 
38 #include <Locker.h>
39 #include <String.h>
40 
41 #include "BeUtils.h"
42 
43 class Resource : public Object {
44 private:
45 	BString	 fTransport;
46 	BString  fTransportAddress;
47 	BString  fConnection;
48 	sem_id   fResourceAvailable;
49 
50 	bool NeedsLocking();
51 
52 
53 public:
54 	Resource(const char* transport, const char* address, const char* connection);
55 	~Resource();
56 
57 	bool Equals(const char* transport, const char* address, const char* connection);
58 
59 	const BString& Transport() const { return fTransport; }
60 
61 	bool Lock();
62 	void Unlock();
63 };
64 
65 class ResourceManager {
66 private:
67 	BObjectList<Resource> fResources;
68 
69 	Resource* Find(const char* transport, const char* address, const char* connection);
70 
71 public:
72 	~ResourceManager();
73 
74 	Resource* Allocate(const char* transport, const char* address, const char* connection);
75 	void Free(Resource* r);
76 };
77 
78 #endif
79