/* * Copyright (C) 2014 Alfons Wirtz * website www.freerouting.net * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License at <http://www.gnu.org/licenses/> * for more details. * * NetRules.java * * Created on 7. April 2005, 07:52 */ package rules; /** * Contains the array of net classes for interactive routing. * * @author Alfons Wirtz */ public class NetClasses implements java.io.Serializable { /** * Returns the number of classes in this array. */ public int count() { return class_arr.size(); } /** * Returns the net class with index p_index. */ public NetClass get(int p_index) { assert p_index >= 0 && p_index <= class_arr.size() - 1; return class_arr.get(p_index); } /** * Returns the net class with name p_name, or null, if no such class exists. */ public NetClass get(String p_name) { for (NetClass curr_class : this.class_arr) { if (curr_class.get_name().equals(p_name)) { return curr_class; } } return null; } /** * Appends a new empty class with name p_name to the class array */ NetClass append(String p_name, board.LayerStructure p_layer_structure, ClearanceMatrix p_clearance_matrix) { NetClass new_class = new NetClass(p_name, p_layer_structure, p_clearance_matrix); class_arr.add(new_class); return new_class; } /** * Appends a new empty class to the class array. A name for the class is created internally */ NetClass append(board.LayerStructure p_layer_structure, ClearanceMatrix p_clearance_matrix, java.util.Locale p_locale) { java.util.ResourceBundle resources = java.util.ResourceBundle.getBundle("rules.resources.Default", p_locale); String name_front = resources.getString("class"); String new_name = null; Integer index = 0; for (;;) { ++index; new_name = name_front + index.toString(); if (this.get(new_name) == null) { break; } } return append(new_name, p_layer_structure, p_clearance_matrix); } /** * Looks, if the list contains a net class with trace half widths all equal to p_trace_half_width, * trace clearance class equal to p_trace_clearance_class and via rule equal to p_cia_rule. * Returns null, if no such net class was found. */ public NetClass find(int p_trace_half_width, int p_trace_clearance_class, ViaRule p_via_rule) { for (NetClass curr_class : this.class_arr) { if (curr_class.get_trace_clearance_class() == p_trace_clearance_class && curr_class.get_via_rule() == p_via_rule) { boolean trace_widths_equal = true; for (int i = 0; i < curr_class.layer_count(); ++i) { if (curr_class.get_trace_half_width(i) != p_trace_half_width) { trace_widths_equal = false; break; } } if (trace_widths_equal) { return curr_class; } } } return null; } /** * Looks, if the list contains a net class with trace half width[i] all equal to p_trace_half_width_arr[i] * for 0 <= i < layer_count, trace clearance class equal to p_trace_clearance_class * and via rule equal to p_via_rule. Returns null, if no such net class was found. */ public NetClass find(int[] p_trace_half_width_arr, int p_trace_clearance_class, ViaRule p_via_rule) { for (NetClass curr_class : this.class_arr) { if (curr_class.get_trace_clearance_class() == p_trace_clearance_class && curr_class.get_via_rule() == p_via_rule && p_trace_half_width_arr.length == curr_class.layer_count()) { boolean trace_widths_equal = true; for (int i = 0; i < curr_class.layer_count(); ++i) { if (curr_class.get_trace_half_width(i) != p_trace_half_width_arr[i]) { trace_widths_equal = false; break; } } if (trace_widths_equal) { return curr_class; } } } return null; } /** * Removes p_net_class from this list. * Returns false, if p_net_class was not contained in the list. */ public boolean remove(NetClass p_net_class) { return this.class_arr.remove(p_net_class); } private final java.util.Vector<NetClass> class_arr = new java.util.Vector<NetClass>(); }