Line data Source code
1 : /* 2 : * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #include "route/route.h" 6 : 7 : #include "base/time_util.h" 8 : 9 4269505 : Route::Route() { 10 4269378 : } 11 : 12 4268715 : Route::~Route() { 13 4268715 : } 14 : 15 : // Selected path 16 8660947 : const Path *Route::front() const { 17 8660947 : PathList::const_iterator it = path_.begin(); 18 17320161 : if (it == path_.end()) 19 2334358 : return NULL; 20 6325452 : return it.operator->(); 21 : } 22 : 23 : // Insert a path 24 1041511 : void Route::insert(const Path *ipath) { 25 1041511 : Path *path = const_cast<Path *> (ipath); 26 : 27 1041511 : path->set_time_stamp_usecs(UTCTimestampUsec()); 28 1041518 : path_.push_back(*path); 29 1041492 : } 30 : 31 : // Remove a path 32 1040968 : void Route::remove(const Path *ipath) { 33 1040968 : Path *path = const_cast<Path *> (ipath); 34 : 35 1040968 : path->set_time_stamp_usecs(UTCTimestampUsec()); 36 1041346 : PathList::const_iterator eraseIt = path_.iterator_to(*path); 37 2082222 : path_.erase(eraseIt); 38 1041251 : } 39 : 40 2300932 : void Route::Sort(Compare compare, const Path *prev_front) { 41 2300932 : path_.sort(compare); 42 : 43 2300835 : set_last_update_at_to_now(); 44 : // If the best path changes, update route's time stamp. 45 2300828 : if (prev_front != front()) { 46 1976209 : set_last_change_at_to_now(); 47 : } 48 2300564 : }