12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- Copyright 2010 Intel Corporation
- Use, modification and distribution are subject to the Boost Software License,
- Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt).
- */
- //schematic_database.hpp
- #ifndef BOOST_POLYGON_TUTORIAL_SCHEMATIC_DATABASE_HPP
- #define BOOST_POLYGON_TUTORIAL_SCHEMATIC_DATABASE_HPP
- #include <string>
- #include <fstream>
- #include <map>
- #include <set>
- #include "device.hpp"
- struct schematic_database{
- std::vector<device> devices;
- std::map<std::string, std::set<std::size_t> > nets;
- };
- //given a vector of devices populate the map of net name to set of device index
- inline void extract_netlist(std::map<std::string, std::set<std::size_t> >& nets,
- std::vector<device>& devices) {
- for(std::size_t i = 0; i < devices.size(); ++i) {
- for(std::size_t j = 0; j < devices[i].terminals.size(); ++j) {
- //create association between net name and device id
- nets[devices[i].terminals[j]].insert(nets[devices[i].terminals[j]].end(), i);
- }
- }
- }
- inline void parse_schematic_database(schematic_database& schematic,
- std::ifstream& sin) {
- std::vector<device>& devices = schematic.devices;
- while(!sin.eof()) {
- std::string type_id;
- sin >> type_id;
- if(type_id == "Device") {
- device d;
- sin >> d;
- devices.push_back(d);
- } else if (type_id == "Pin") {
- std::string net;
- sin >> net;
- device d;
- d.type = "PIN";
- d.terminals.push_back(net);
- devices.push_back(d);
- } else if (type_id == "") {
- break;
- }
- }
- extract_netlist(schematic.nets, devices);
- }
- #endif
|