-
Notifications
You must be signed in to change notification settings - Fork 0
/
areas.h
116 lines (91 loc) · 3.76 KB
/
areas.h
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
#ifndef AREAS_H
#define AREAS_H
/*
+---------------------------------------+
| BETH YW? WELSH GOVERNMENT DATA PARSER |
+---------------------------------------+
AUTHOR: 956213
This file contains the Areas class, which is responsible for parsing data
from a standard input stream and converting it into a series of objects:
Measure — Represents a single measure for an area, e.g.
| population. Contains a human-readable label and a map of
| the measure accross a number of years.
|
+-> Area Represents an area. Contains a unique local authority code
| used in national statistics, a map of the names of the area
| (i.e. in English and Welsh), and a map of various Measure
| objects.
|
+-> Areas A class that contains all Area objects.
TODO: Read the block comments with TODO in areas.cpp to know which
functions and member variables you need to declare in this class.
*/
#include <iostream>
#include <string>
#include <tuple>
#include <unordered_set>
#include "datasets.h"
#include "area.h"
/*
An alias for filters based on strings such as categorisations e.g. area,
and measures.
*/
using StringFilterSet = std::unordered_set<std::string>;
/*
An alias for a year filter.
*/
using YearFilterTuple = std::tuple<unsigned int, unsigned int>;
/*
An alias for the data within an Areas object stores Area objects.
TODO: you should remove the declaration of the Null class below, and set
AreasContainer to a valid Standard Library container of your choosing.
*/
using AreasContainer = std::map<std::string, Area>;
/*
Areas is a class that stores all the data categorised by area. The
underlying Standard Library container is customisable using the alias above.
To understand the functions declared below, read the comments in areas.cpp
and the coursework worksheet. Briefly: populate() is called by bethyw.cpp to
populate data inside an Areas instance. This function will hand off the
specific parsing of code to other functions, based on the value of
BethYw::SourceDataType.
TODO: Based on your implementation, there may be additional constructors
or functions you implement here, and perhaps additional operators you may wish
to overload.
*/
class Areas {
public:
Areas();
void setArea(const std::string& localAuthorityCode, Area area);
Area& getArea(const std::string& localAuthorityCode);
const AreasContainer &getAreasContainer() const;
unsigned int size();
void populateFromWelshStatsJSON(std::istream& is, const BethYw::SourceColumnMapping& cols,const StringFilterSet * const areasFilter, const StringFilterSet * const measuresFilter, const YearFilterTuple * const yearsFilter);
void populateFromAuthorityByYearCSV(
std::istream &is,
const BethYw::SourceColumnMapping &cols,
const StringFilterSet *const areasFilter,
const YearFilterTuple *const yearsFilter);
void populateFromAuthorityCodeCSV(
std::istream& is,
const BethYw::SourceColumnMapping& cols,
const StringFilterSet * const areas = nullptr)
noexcept(false);
void populate(
std::istream& is,
const BethYw::SourceDataType& type,
const BethYw::SourceColumnMapping& cols) noexcept(false);
void populate(
std::istream& is,
const BethYw::SourceDataType& type,
const BethYw::SourceColumnMapping& cols,
const StringFilterSet * const areasFilter = nullptr,
const StringFilterSet * const measuresFilter = nullptr,
const YearFilterTuple * const yearsFilter = nullptr)
noexcept(false);
friend std::ostream &operator<<(std::ostream &os, Areas &areas);
std::string toJSON() const;
private:
AreasContainer areasContainer;
};
#endif // AREAS_H