COIN-OR::LEMON - Graph Library

Changeset 1429:4283998fb2be in lemon-0.x for src/lemon/lemon_writer.h


Ignore:
Timestamp:
05/19/05 13:49:42 (19 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@1903
Message:

Able to read edge from undirected edgeset
Graph reader and graph writer can resolve items by id.

It makes possible:

GraphReader?<Graph> reader(std::cin, graph);

reader.readNodeMap....

NewEdgeSetAdaptor?<Graph> edgeset(graph);
UndirEdgeSetReader?<Graph> unir_edgeset_reader(reader, edgeset, reader);

reader.run();

It reads the graph and an additional edgeset in to the edgeset.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/lemon/lemon_writer.h

    r1421 r1429  
    244244
    245245      virtual void write(std::ostream& os, const Item& item) const {
    246         return idWriter.writeId(os, item);
     246        idWriter.writeId(os, item);
    247247      }
    248248    };
     
    274274    typedef _Graph Graph;
    275275    typedef _Traits Traits;
    276     typedef typename Graph::Node Item;
     276    typedef typename Graph::Node Node;
    277277
    278278    /// \brief Constructor.
     
    320320                            const Writer& writer = Writer()) {
    321321      writers.push_back(
    322         make_pair(name, new MapWriter<Item, Map, Writer>(map, writer)));
     322        make_pair(name, new MapWriter<Node, Map, Writer>(map, writer)));
    323323      return *this;
    324324    }
     
    380380    /// Otherwise if the \c forceId parameter was true it will write
    381381    /// its id in the graph.
    382     void writeId(std::ostream& os, const Item& item) const {
     382    void writeId(std::ostream& os, const Node& item) const {
    383383      if (forceIdMap) {
    384384        os << graph.id(item);
     
    390390  private:
    391391
    392     typedef std::vector<std::pair<std::string, WriterBase<Item>*> > MapWriters;
     392    typedef std::vector<std::pair<std::string, WriterBase<Node>*> > MapWriters;
    393393    MapWriters writers;
    394394
    395     WriterBase<Item>* idMap;
     395    WriterBase<Node>* idMap;
    396396    bool forceIdMap;
    397397   
     
    431431    typedef _Graph Graph;
    432432    typedef _Traits Traits;
    433     typedef typename Graph::Edge Item;
     433    typedef typename Graph::Node Node;
     434    typedef typename Graph::Edge Edge;
    434435
    435436    /// \brief Constructor.
     
    447448      : Parent(_writer), idMap(0), forceIdMap(_forceIdMap),
    448449        graph(_graph), id(_id),
    449         nodeIdWriter(new IdWriter<typename Graph::Node, NodeIdWriter>
    450                      (_nodeIdWriter)) {}
     450        nodeIdWriter(new IdWriter<Node, NodeIdWriter>(_nodeIdWriter)) {}
    451451
    452452    /// \brief Destructor.
     
    482482                            const Writer& writer = Writer()) {
    483483      writers.push_back(
    484         make_pair(name, new MapWriter<Item, Map, Writer>(map, writer)));
     484        make_pair(name, new MapWriter<Edge, Map, Writer>(map, writer)));
    485485      return *this;
    486486    }
     
    547547    /// Otherwise if the \c forceId parameter was true it will write
    548548    /// its id in the graph.
    549     void writeId(std::ostream& os, const Item& item) const {
     549    void writeId(std::ostream& os, const Edge& item) const {
    550550      if (forceIdMap) {
    551551        os << graph.id(item);
     
    557557  private:
    558558
    559     typedef std::vector<std::pair<std::string, WriterBase<Item>*> > MapWriters;
     559    typedef std::vector<std::pair<std::string, WriterBase<Edge>*> > MapWriters;
    560560    MapWriters writers;
    561561
    562     WriterBase<Item>* idMap;
     562    WriterBase<Edge>* idMap;
    563563    bool forceIdMap;
    564564   
     
    566566    std::string id;
    567567
    568     std::auto_ptr<IdWriterBase<typename Graph::Node> > nodeIdWriter;
     568    std::auto_ptr<IdWriterBase<Node> > nodeIdWriter;
    569569  };
    570570
     
    605605    typedef _Graph Graph;
    606606    typedef _Traits Traits;
    607     typedef typename Graph::UndirEdge Item;
     607    typedef typename Graph::Node Node;
     608    typedef typename Graph::Edge Edge;
     609    typedef typename Graph::UndirEdge UndirEdge;
    608610
    609611    /// \brief Constructor.
     
    621623      : Parent(_writer), idMap(0), forceIdMap(_forceIdMap),
    622624        graph(_graph), id(_id),
    623         nodeIdWriter(new IdWriter<typename Graph::Node, NodeIdWriter>
    624                      (_nodeIdWriter)) {}
     625        nodeIdWriter(new IdWriter<Node, NodeIdWriter>(_nodeIdWriter)) {}
    625626
    626627    /// \brief Destructor.
     
    656657                                          const Writer& writer = Writer()) {
    657658      writers.push_back(
    658         make_pair(name, new MapWriter<Item, Map, Writer>(map, writer)));
     659        make_pair(name, new MapWriter<UndirEdge, Map, Writer>(map, writer)));
    659660      return *this;
    660661    }
     
    743744    /// undirected edge. Otherwise if the \c forceId parameter was true it
    744745    /// will write its id in the graph.
    745     void writeId(std::ostream& os, const Item& item) const {
     746    void writeId(std::ostream& os, const UndirEdge& item) const {
    746747      if (forceIdMap) {
    747748        os << graph.id(item);
     
    751752    }
    752753
    753   private:
    754 
    755     typedef std::vector<std::pair<std::string, WriterBase<Item>*> > MapWriters;
     754    /// \brief Write the id of the given edge.
     755    ///
     756    /// It writes the id of the given edge. If there was written
     757    /// an "id" named map then it will write the map value belongs to the
     758    /// edge. Otherwise if the \c forceId parameter was true it
     759    /// will write its id in the graph. If the edge is forward map
     760    /// then its prefix character is \c '+' elsewhere \c '-'.
     761    void writeId(std::ostream& os, const Edge& item) const {
     762      if (graph.forward(item)) {
     763        os << "+ ";
     764      } else {
     765        os << "- ";
     766      }
     767      if (forceIdMap) {
     768        os << graph.id(item);
     769      } else {
     770        idMap->write(os, item);
     771      }
     772    }
     773
     774  private:
     775
     776    typedef std::vector<std::pair<std::string,
     777                                  WriterBase<UndirEdge>*> > MapWriters;
    756778    MapWriters writers;
    757779
    758     WriterBase<Item>* idMap;
     780    WriterBase<UndirEdge>* idMap;
    759781    bool forceIdMap;
    760782   
     
    762784    std::string id;
    763785
    764     std::auto_ptr<IdWriterBase<typename Graph::Node> > nodeIdWriter;
     786    std::auto_ptr<IdWriterBase<Node> > nodeIdWriter;
    765787  };
    766788
     
    779801    typedef CommonSectionWriterBase Parent;
    780802    typedef _Graph Graph;
    781     typedef typename Graph::Node Item;
     803    typedef typename Graph::Node Node;
    782804  public:
    783805   
     
    807829    ///
    808830    /// Add a node writer command for the NodeWriter.
    809     void writeNode(const std::string& name, const Item& item) {
     831    void writeNode(const std::string& name, const Node& item) {
    810832      writers.push_back(make_pair(name, &item));
    811833    }
     
    836858    std::string id;
    837859
    838     typedef std::vector<std::pair<std::string, const Item*> > ItemWriters;
    839     ItemWriters writers;
    840     std::auto_ptr<IdWriterBase<Item> > idWriter;
     860    typedef std::vector<std::pair<std::string, const Node*> > NodeWriters;
     861    NodeWriters writers;
     862    std::auto_ptr<IdWriterBase<Node> > idWriter;
    841863  };
    842864
     
    855877    typedef CommonSectionWriterBase Parent;
    856878    typedef _Graph Graph;
    857     typedef typename Graph::Edge Item;
     879    typedef typename Graph::Edge Edge;
    858880  public:
    859881   
     
    882904    ///
    883905    /// Add an edge writer command for the EdgeWriter.
    884     void writeEdge(const std::string& name, const Item& item) {
     906    void writeEdge(const std::string& name, const Edge& item) {
    885907      writers.push_back(make_pair(name, &item));
    886908    }
     
    911933    std::string id;
    912934
    913     typedef std::vector<std::pair<std::string, const Item*> > ItemWriters;
    914     ItemWriters writers;
    915 
    916     std::auto_ptr<IdWriterBase<Item> > idWriter;
     935    typedef std::vector<std::pair<std::string, const Edge*> > EdgeWriters;
     936    EdgeWriters writers;
     937
     938    std::auto_ptr<IdWriterBase<Edge> > idWriter;
    917939  };
    918940
     
    931953    typedef CommonSectionWriterBase Parent;
    932954    typedef _Graph Graph;
    933     typedef typename Graph::UndirEdge Item;
     955    typedef typename Graph::Node Node;
     956    typedef typename Graph::Edge Edge;
     957    typedef typename Graph::UndirEdge UndirEdge;
    934958  public:
    935959   
     
    944968               const std::string& _id = std::string())
    945969      : Parent(_writer), id(_id),
    946         idWriter(new IdWriter<typename Graph::UndirEdge, _IdWriter>
    947                  (_idWriter)) {}
     970        undirEdgeIdWriter(new IdWriter<UndirEdge, _IdWriter>(_idWriter)),
     971        edgeIdWriter(new IdWriter<Edge, _IdWriter>(_idWriter)) {}
    948972
    949973    /// \brief Destructor.
     
    957981  public:
    958982
     983    /// \brief Add an edge writer command for the UndirEdgeWriter.
     984    ///
     985    /// Add an edge writer command for the UndirEdgeWriter.
     986    void writeEdge(const std::string& name, const Edge& item) {
     987      edgeWriters.push_back(make_pair(name, &item));
     988    }
     989
    959990    /// \brief Add an undirected edge writer command for the UndirEdgeWriter.
    960991    ///
    961     /// Add an edge writer command for the UndirEdgeWriter.
    962     void writeUndirEdge(const std::string& name, const Item& item) {
    963       writers.push_back(make_pair(name, &item));
     992    /// Add an undirected edge writer command for the UndirEdgeWriter.
     993    void writeUndirEdge(const std::string& name, const UndirEdge& item) {
     994      undirEdgeWriters.push_back(make_pair(name, &item));
    964995    }
    965996
     
    9711002    /// and the header line's id and the writer's id are the same.
    9721003    virtual std::string header() {
    973       return "@edges " + id;
     1004      return "@undiredges " + id;
    9741005    }
    9751006
     
    9781009    /// Write the content of the section.
    9791010    virtual void write(std::ostream& os) {
    980       for (int i = 0; i < (int)writers.size(); ++i) {
    981         os << writers[i].first << ' ';
    982         idWriter->write(os, *(writers[i].second));
     1011      for (int i = 0; i < (int)undirEdgeWriters.size(); ++i) {
     1012        os << undirEdgeWriters[i].first << ' ';
     1013        undirEdgeIdWriter->write(os, *(undirEdgeWriters[i].second));
    9831014        os << std::endl;
    9841015      }
     1016      for (int i = 0; i < (int)edgeWriters.size(); ++i) {
     1017        os << edgeWriters[i].first << ' ';
     1018        edgeIdWriter->write(os, *(edgeWriters[i].second));
     1019        os << std::endl;
     1020      }
    9851021    }
    9861022   
     
    9891025    std::string id;
    9901026
    991     typedef std::vector<std::pair<std::string, const Item*> > ItemWriters;
    992     ItemWriters writers;
    993 
    994     std::auto_ptr<IdWriterBase<Item> > idWriter;
     1027    typedef std::vector<std::pair<std::string,
     1028                                  const UndirEdge*> > UndirEdgeWriters;
     1029    UndirEdgeWriters undirEdgeWriters;
     1030    std::auto_ptr<IdWriterBase<UndirEdge> > undirEdgeIdWriter;
     1031
     1032    typedef std::vector<std::pair<std::string, const Edge*> > EdgeWriters;
     1033    EdgeWriters edgeWriters;
     1034    std::auto_ptr<IdWriterBase<Edge> > edgeIdWriter;
     1035
    9951036  };
    9961037
Note: See TracChangeset for help on using the changeset viewer.