diff options
author | KT <tran0563@umn.edu> | 2021-10-04 21:25:55 -0500 |
---|---|---|
committer | KT <tran0563@umn.edu> | 2021-10-04 21:25:55 -0500 |
commit | 427e0e31a7ba3d947aac97b30d9397dad329078d (patch) | |
tree | 534bb19ea21c593d314ce32ae875012df0338ed1 /dev/a3-earthquake/earthquake_database.cc | |
parent | publish a2 (diff) | |
download | csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.tar csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.tar.gz csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.tar.bz2 csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.tar.lz csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.tar.xz csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.tar.zst csci4611-427e0e31a7ba3d947aac97b30d9397dad329078d.zip |
Publish a3
Diffstat (limited to 'dev/a3-earthquake/earthquake_database.cc')
-rw-r--r-- | dev/a3-earthquake/earthquake_database.cc | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/dev/a3-earthquake/earthquake_database.cc b/dev/a3-earthquake/earthquake_database.cc new file mode 100644 index 0000000..2c9a822 --- /dev/null +++ b/dev/a3-earthquake/earthquake_database.cc @@ -0,0 +1,77 @@ +/** CSci-4611 Assignment 3: Earthquake + */ + +#include <fstream> +#include <algorithm> + +#include "earthquake_database.h" + + +EarthquakeDatabase::EarthquakeDatabase(std::string filename) { + + std::ifstream in(filename.c_str()); + std::string line; + while (getline(in, line)) { + if (line.size() > 30) { + Earthquake e(line); + if (earthquakes.size() == 0) { + min_mag_ = (float)e.magnitude(); + max_mag_ = (float)e.magnitude(); + } + if (e.magnitude() > max_mag_) { + max_mag_ = (float)e.magnitude(); + } + if (e.magnitude() < min_mag_) { + min_mag_ = (float)e.magnitude(); + } + earthquakes.push_back(e); + } + } +} + +Earthquake EarthquakeDatabase::earthquake(int index) { + return earthquakes[index]; +} + +int EarthquakeDatabase::min_index() { + return 250; +} + +int EarthquakeDatabase::max_index() { + return (int)earthquakes.size() - 1; +} + +int EarthquakeDatabase::FindMostRecentQuake(Date d) { + double targetSeconds = d.ToSeconds(); + int start = min_index(); + int end = max_index(); + while (start < end-1) { + int half = (start + end) / 2; + if (earthquakes[half].date().ToSeconds() > targetSeconds) { + end = half - 1; + } + else { + start = half; + } + } + if (start == end) { + return start; + } + else { + if (earthquakes[end].date().ToSeconds() > targetSeconds) { + return start; + } + else { + return end; + } + } +} + +float EarthquakeDatabase::min_magnitude() { + return min_mag_; +} + +float EarthquakeDatabase::max_magnitude() { + return max_mag_; +} + |