Matthew Goldsmith
/
cis441projMS2b
Road.cpp@1:54512aca944d, 2019-11-11 (annotated)
- Committer:
- kchen7
- Date:
- Mon Nov 11 00:50:05 2019 +0000
- Revision:
- 1:54512aca944d
- Parent:
- 0:ca7cb51e9fd1
- Child:
- 4:ef8866873df5
attempt 1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mwgold | 0:ca7cb51e9fd1 | 1 | #include <math.h> |
mwgold | 0:ca7cb51e9fd1 | 2 | #include "Road.h" |
mwgold | 0:ca7cb51e9fd1 | 3 | |
kchen7 | 1:54512aca944d | 4 | Road::Road(Intersection* intersection, int roadId) { |
mwgold | 0:ca7cb51e9fd1 | 5 | active_cars = 0x00; |
mwgold | 0:ca7cb51e9fd1 | 6 | last_car = NULL; |
mwgold | 0:ca7cb51e9fd1 | 7 | |
kchen7 | 1:54512aca944d | 8 | this->intersection = intersection; |
kchen7 | 1:54512aca944d | 9 | this->roadId = roadId; |
mwgold | 0:ca7cb51e9fd1 | 10 | next_release = 0; |
mwgold | 0:ca7cb51e9fd1 | 11 | num_cars = 0; |
mwgold | 0:ca7cb51e9fd1 | 12 | |
kchen7 | 1:54512aca944d | 13 | pending_car = new AccCar(num_cars + 5 * (roadId - 1), this, pow(2, num_cars)); |
mwgold | 0:ca7cb51e9fd1 | 14 | pending_car->set_target_speed(rand() % 11 + 5); |
mwgold | 0:ca7cb51e9fd1 | 15 | } |
mwgold | 0:ca7cb51e9fd1 | 16 | |
mwgold | 0:ca7cb51e9fd1 | 17 | int Road::try_enter_car(int time) { |
mwgold | 0:ca7cb51e9fd1 | 18 | if( next_release <= time && pending_car != NULL ) { |
mwgold | 0:ca7cb51e9fd1 | 19 | if( last_car == NULL || last_car->position >= pending_car->speed + 2 ) { |
mwgold | 0:ca7cb51e9fd1 | 20 | pending_car->set_forward_car(last_car); |
mwgold | 0:ca7cb51e9fd1 | 21 | pending_car->reset(); |
mwgold | 0:ca7cb51e9fd1 | 22 | active_cars = active_cars | pending_car->flag; |
mwgold | 0:ca7cb51e9fd1 | 23 | |
mwgold | 0:ca7cb51e9fd1 | 24 | last_car = pending_car; |
mwgold | 0:ca7cb51e9fd1 | 25 | cars[num_cars] = pending_car; |
mwgold | 0:ca7cb51e9fd1 | 26 | |
mwgold | 0:ca7cb51e9fd1 | 27 | num_cars++; |
mwgold | 0:ca7cb51e9fd1 | 28 | |
mwgold | 0:ca7cb51e9fd1 | 29 | if(num_cars < MAX_CARS) { |
kchen7 | 1:54512aca944d | 30 | pending_car = new AccCar(num_cars + 5 * (this->roadId - 1), this, pow(2, num_cars)); |
mwgold | 0:ca7cb51e9fd1 | 31 | pending_car->set_target_speed(rand() % 11 + 5); |
mwgold | 0:ca7cb51e9fd1 | 32 | |
mwgold | 0:ca7cb51e9fd1 | 33 | next_release = time + rand() % 3; |
mwgold | 0:ca7cb51e9fd1 | 34 | } else { |
mwgold | 0:ca7cb51e9fd1 | 35 | pending_car = NULL; |
mwgold | 0:ca7cb51e9fd1 | 36 | } |
mwgold | 0:ca7cb51e9fd1 | 37 | |
mwgold | 0:ca7cb51e9fd1 | 38 | return last_car->id; |
mwgold | 0:ca7cb51e9fd1 | 39 | } |
mwgold | 0:ca7cb51e9fd1 | 40 | } |
mwgold | 0:ca7cb51e9fd1 | 41 | |
mwgold | 0:ca7cb51e9fd1 | 42 | return -1; |
mwgold | 0:ca7cb51e9fd1 | 43 | } |
mwgold | 0:ca7cb51e9fd1 | 44 | |
mwgold | 0:ca7cb51e9fd1 | 45 | void Road::let_cars_update() { |
mwgold | 0:ca7cb51e9fd1 | 46 | if( active_cars > 0x00 ) { |
mwgold | 0:ca7cb51e9fd1 | 47 | go_flags.set(active_cars); |
mwgold | 0:ca7cb51e9fd1 | 48 | } |
mwgold | 0:ca7cb51e9fd1 | 49 | } |
mwgold | 0:ca7cb51e9fd1 | 50 | |
mwgold | 0:ca7cb51e9fd1 | 51 | void Road::wait_for_car_update() { |
mwgold | 0:ca7cb51e9fd1 | 52 | if( active_cars > 0x00 ) { |
mwgold | 0:ca7cb51e9fd1 | 53 | done_flags.wait_all(active_cars); |
mwgold | 0:ca7cb51e9fd1 | 54 | } |
mwgold | 0:ca7cb51e9fd1 | 55 | } |
mwgold | 0:ca7cb51e9fd1 | 56 | |
kchen7 | 1:54512aca944d | 57 | void Road::check_exit_cars() { |
mwgold | 0:ca7cb51e9fd1 | 58 | for( int i=0; i < num_cars; i++ ) { |
kchen7 | 1:54512aca944d | 59 | if(this->cars[i]->position >= 100 ) { |
mwgold | 0:ca7cb51e9fd1 | 60 | active_cars = active_cars ^ this->cars[i]->flag; |
mwgold | 0:ca7cb51e9fd1 | 61 | |
mwgold | 0:ca7cb51e9fd1 | 62 | this->cars[i]->position = -1; |
mwgold | 0:ca7cb51e9fd1 | 63 | this->cars[i]->speed = -1; |
mwgold | 0:ca7cb51e9fd1 | 64 | } |
kchen7 | 1:54512aca944d | 65 | } |
mwgold | 0:ca7cb51e9fd1 | 66 | } |
mwgold | 0:ca7cb51e9fd1 | 67 | |
mwgold | 0:ca7cb51e9fd1 | 68 | void Road::print_status() { |
mwgold | 0:ca7cb51e9fd1 | 69 | for( int i=0; i < num_cars; i++ ) { |
kchen7 | 1:54512aca944d | 70 | printf("Car %d on road %d: %d -> %d\r\n", cars[i]->id, this->roadId, cars[i]->position, cars[i]->speed); |
mwgold | 0:ca7cb51e9fd1 | 71 | } |
kchen7 | 1:54512aca944d | 72 | } |
kchen7 | 1:54512aca944d | 73 | |
kchen7 | 1:54512aca944d | 74 | void Road::intendToEnter(int carId) { |
kchen7 | 1:54512aca944d | 75 | intersection->intendToEnter(carId, this->roadId); |
kchen7 | 1:54512aca944d | 76 | } |