/*
* 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.
*
* Packages.java
*
* Created on 3. Juni 2004, 09:29
*/
package library;
import java.util.Iterator;
import java.util.Vector;
import geometry.planar.Shape;
/**
* Describes a library of component packages.
*
* @author Alfons Wirtz
*/
public class Packages implements java.io.Serializable
{
/**
* Creates a new instance of Packages.
* p_padstack_list is the list of padstacks used for the pins
* of the packages in this data structure.
*/
public Packages(Padstacks p_padstack_list)
{
this.padstack_list = p_padstack_list;
}
/**
* Returns the package with the input name and the input side or null,
* if no such package exists.
*/
public Package get(String p_name, boolean p_is_front)
{
Iterator<Package> it = package_arr.iterator();
Package other_side_package = null;
while(it.hasNext())
{
Package curr_package = it.next();
if (curr_package != null && curr_package.name.compareToIgnoreCase(p_name) == 0)
{
if (curr_package.is_front == p_is_front)
{
return curr_package;
}
other_side_package = curr_package;
}
}
return other_side_package;
}
/**
* Returns the package with index p_package_no.
* Packages numbers are from 1 to package count.
*/
public Package get(int p_package_no)
{
Package result = package_arr.elementAt(p_package_no - 1);
if (result != null && result.no != p_package_no)
{
System.out.println("Padstacks.get: inconsistent padstack number");
}
return result;
}
/**
* Returns the count of packages in this object.
*/
public int count()
{
return package_arr.size();
}
/**
* Appends a new package with the input data to this object.
*/
public Package add(String p_name, Package.Pin [] p_pin_arr, Shape[] p_outline,
Package.Keepout [] p_keepout_arr, Package.Keepout [] p_via_keepout_arr,
Package.Keepout [] p_place_keepout_arr, boolean p_is_front)
{
Package new_package = new Package(p_name, package_arr.size() + 1, p_pin_arr, p_outline,
p_keepout_arr, p_via_keepout_arr, p_place_keepout_arr, p_is_front, this);
package_arr.add(new_package);
return new_package;
}
/**
* Appends a new package with pins p_pin_arr to this object.
* The package name is generated internally.
*/
public Package add(Package.Pin [] p_pin_arr)
{
String package_name = "Package#" + (new Integer(package_arr.size() + 1)).toString();
return add(package_name, p_pin_arr, null, new Package.Keepout [0], new Package.Keepout [0],
new Package.Keepout [0], true);
}
/** The array of packages in this object */
private Vector<Package> package_arr = new Vector<Package>();
final Padstacks padstack_list;
}