/* -*- tab-width: 4 -*-
*
* Electric(tm) VLSI Design System
*
* File: ExportConfig.java
*
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
*
* Electric(tm) 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.
*
* Electric(tm) 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with Electric(tm); see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, Mass 02111-1307, USA.
*/
package com.sun.electric.tool.generator.layout.fill;
import java.io.Serializable;
public class ExportConfig implements Serializable {
public static final long serialVersionUID = 0;
public static final int HIGHEST_LAYER = -1000;
public static final int NEXT_TO_HIGHEST_LAYER = -2000;
public static final int LOWEST_LAYER = -3000;
public static final int NEXT_TO_LOWEST_LAYER = -4000;
public static final ExportConfig PERIMETER =
new ExportConfig(new int[] {HIGHEST_LAYER, NEXT_TO_HIGHEST_LAYER},
new int[] {});
public static final ExportConfig PERIMETER_AND_INTERNAL =
new ExportConfig(new int[] {HIGHEST_LAYER, NEXT_TO_HIGHEST_LAYER},
new int[] {LOWEST_LAYER});
private int[] perimeterExports;
private int[] internalExports;
public ExportConfig(int[] layersToGetPerimeterExports,
int[] layersToGetInternalExports) {
int l = layersToGetPerimeterExports.length;
perimeterExports = new int[l];
for (int i=0; i<l; i++) {
perimeterExports[i] = layersToGetPerimeterExports[i];
}
l = layersToGetInternalExports.length;
internalExports = new int[l];
for (int i=0; i<l; i++) {
internalExports[i] = layersToGetInternalExports[i];
}
}
private int translate(int lay, int loLay, int hiLay) {
if (lay==HIGHEST_LAYER) {
return hiLay;
} else if (lay==NEXT_TO_HIGHEST_LAYER) {
return hiLay-1;
} else if (lay==LOWEST_LAYER) {
return loLay;
} else if (lay==NEXT_TO_LOWEST_LAYER) {
return loLay+1;
} else {
return lay;
}
}
int[] getPerimeterExports(int loLay, int hiLay) {
int len = perimeterExports.length;
int[] ans = new int[len];
for (int i=0; i<len; i++) {
ans[i] = translate(perimeterExports[i], loLay, hiLay);
}
return ans;
}
int[] getInternalExports(int loLay, int hiLay) {
int len = internalExports.length;
int[] ans = new int[len];
for (int i=0; i<len; i++) {
ans[i] = translate(internalExports[i], loLay, hiLay);
}
return ans;
}
}