adevs
/home/rotten/adevs-2.6/include/adevs_lp_graph.h
00001 /***************
00002 Copyright (C) 2009 by James Nutaro
00003 
00004 This library is free software; you can redistribute it and/or
00005 modify it under the terms of the GNU Lesser General Public
00006 License as published by the Free Software Foundation; either
00007 version 2 of the License, or (at your option) any later version.
00008 
00009 This library is distributed in the hope that it will be useful,
00010 but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 Lesser General Public License for more details.
00013 
00014 You should have received a copy of the GNU Lesser General Public
00015 License along with this library; if not, write to the Free Software
00016 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018 Bugs, comments, and questions can be sent to nutaro@gmail.com
00019 ***************/
00020 #ifndef adevs_lp_graph_h
00021 #define adevs_lp_graph_h
00022 #include <vector>
00023 #include <map>
00024 
00025 namespace adevs
00026 {
00027 
00035 class LpGraph
00036 {
00037         public:
00039                 LpGraph():nodes(0){}
00041                 void addEdge(int A, int B)
00042                 {
00043                         if (E.find(A) == E.end()
00044                                         && I.find(A) == I.end())
00045                                 nodes++; 
00046                         if (E.find(B) == E.end()
00047                                         && I.find(B) == I.end())
00048                                 nodes++; 
00049                         E[A].push_back(B);
00050                         I[B].push_back(A);
00051                 }
00053                 int getLPCount() const { return nodes; }
00055                 const std::vector<int>& getI(int B) { return I[B]; }
00057                 const std::vector<int>& getE(int A) { return E[A]; }
00059                 ~LpGraph(){}
00060         private:
00061                 // Number of nodes in the graph
00062                 int nodes;
00063                 // Influencee graph
00064                 std::map<int,std::vector<int> > E;
00065                 // Complimentary influencer graph
00066                 std::map<int,std::vector<int> > I;
00067 };
00068 
00069 }
00070 
00071 #endif