3b51e98adc33d5c747fe7d53abf299d81516091c
[swift-upb.git] / ext / simple_selector.cpp
1 /*
2  *  simple_selector.cpp
3  *  swift
4  *
5  *  Created by Victor Grishchenko on 10/6/09.
6  *  Copyright 2009 Delft University of Technology. All rights reserved.
7  *
8  */
9
10 #include <queue>
11 #include "swift.h"
12
13 using namespace swift;
14
15 class SimpleSelector : public PeerSelector {
16     typedef std::pair<Address,Sha1Hash> memo_t;
17     typedef std::deque<memo_t>  peer_queue_t;
18     peer_queue_t    peers;
19 public:
20     SimpleSelector () {
21     }
22     void AddPeer (const Address& addr, const Sha1Hash& root) {
23         peers.push_front(memo_t(addr,root)); //,root.fingerprint() !!!
24     }
25     Address GetPeer (const Sha1Hash& for_root) {
26         //uint32_t fp = for_root.fingerprint();
27         for(peer_queue_t::iterator i=peers.begin(); i!=peers.end(); i++)
28             if (i->second==for_root) {
29                 i->second = 0;
30                 sockaddr_in ret = i->first;
31                 while (peers.begin()->second==0)
32                     peers.pop_front();
33                 return ret;
34             }
35         return Address();
36     }
37 };
38