-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinventory.h
More file actions
133 lines (103 loc) · 2.42 KB
/
inventory.h
File metadata and controls
133 lines (103 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
* inventory.h
*
* @authors Juan Arias & Nick Tibbott
*
*/
#ifndef INVENTORY_H
#define INVENTORY_H
#include <iostream>
#include "item.h"
using namespace std;
/*
* Represents an Inventory for the Stock of given Items for a certain Media type (see department.h)
*/
class Inventory {
/*
* Friend function
* Output stream operator overload
*/
friend ostream& operator<<(ostream& os, const Inventory& inv);
private:
/*
* Represents the stock of an Item held in store and keeps track
* of amount currently borrowed
*/
class Stock {
private:
/* Amount currently in-store */
int inStore;
/* Amount currently borrowed */
int borrowed;
public:
/*
* Construct a Stock with a given in-store amount
*/
explicit Stock(int inStore);
/*
* Greater than operator overload
* returns true if in-store amount is greater than count,
* else false
*/
bool operator>(int count) const;
/*
* Prefix increment operator overload
* increments in-store amount and decrements borrowed amount
*/
Stock& operator++();
/*
* Prefix decrement operator overload
* decrements in-store amount and increments borrowed amount
*/
Stock& operator--();
/*
* Returns the amount currently in-store
*/
int amountInStore() const;
/*
* Returns the amount currently borrowed
*/
int amountBorrowed() const;
/*
* Increases the total Stock by the given amount
*/
void increase(int amount);
};
/* Map each Item to a Stock for tracking amount in-store & amount borrowed*/
map<const Item*, Stock*, ItemCompare> itemStock;
/* Map each Item from its key for easy retrieval */
map<const string, Item*> itemMap;
/*
* Deallocates all dynamic memory
*/
void clear();
/*
* Returns true if given Item has in-store amount greater than zero
*/
bool inStock(const Item* item) const;
public:
/*
* Destructor to deallocate all dynamic memory
*/
virtual ~Inventory();
/*
* Adds the given Item and Stock
*/
void addItem(Item* item, int stockAmount);
/*
* Lends the given Item by decreasing in-store amount &
* increasing borrowed amount
* @ return true if Item can be lent (in-stock)
*/
bool lendItem(const Item* item);
/*
* Returns the given item by increasing in-store amount &
* decreasing borrowed amount
*/
bool returnItem(const Item* item);
/*
* Returns the Item with the given key
*/
const Item* getItem(const string& itemKey) const;
};
#endif /* INVENTORY_H */