/* 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 #include #include #include #include "device.hpp" struct schematic_database{ std::vector devices; std::map > nets; }; //given a vector of devices populate the map of net name to set of device index inline void extract_netlist(std::map >& nets, std::vector& 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& 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