00001 package SctData;
00002
00003 import Sct.*;
00004
00008 public class ModuleElement implements Streamable {
00016 public ModuleElement(int first, int last) throws IllegalArgumentException {
00017 if (last >= Parameters.nChannelModule || last < first)
00018 throw new IllegalArgumentException("Unable to create ModuleElement with parameters first: " + first + " last: " + last);
00019
00020 this.first = first;
00021 this.last = last;
00022 }
00023
00028 public static ModuleElement chip(int chip) {
00029 return new ModuleElement(chip*Parameters.nChannelChip, (chip+1)*Parameters.nChannelChip - 1);
00030 }
00031
00036 public static ModuleElement channel(int channel) {
00037 return new ModuleElement(channel, channel);
00038 }
00039
00044 public static ModuleElement link(int link) {
00045 return new ModuleElement(link*Parameters.nChannelLink, (link+1)*Parameters.nChannelLink - 1);
00046 }
00047
00051 public static ModuleElement module() {
00052 return new ModuleElement(0, Parameters.nChannelModule-1);
00053 }
00054
00056 public int getFirst() {
00057 return first;
00058 }
00059
00061 public int getLast() {
00062 return last;
00063 }
00064
00066 public int getNChannels() {
00067 return last-first + 1;
00068 }
00069
00071 public boolean isChannel() {
00072 return getNChannels() == 1;
00073 }
00074
00076 public boolean isChip() {
00077 return (getFirst() % Parameters.nChannelChip == 0 && getNChannels() == Parameters.nChannelChip);
00078 }
00079
00081 public boolean isLink() {
00082 return (getFirst() % Parameters.nChannelLink == 0 && getNChannels() == Parameters.nChannelLink);
00083 }
00084
00086 public boolean isModule() {
00087 return (getFirst() % Parameters.nChannelModule == 0 && getNChannels() == Parameters.nChannelModule);
00088 }
00089
00091 public boolean equals(Object e2) {
00092 if (e2 instanceof ModuleElement) {
00093 ModuleElement me2 = (ModuleElement)e2;
00094 return (this.getFirst() == me2.getFirst() && this.getLast() == me2.getLast());
00095 }
00096 return false;
00097 }
00098
00100 public boolean superset(ModuleElement e2) {
00101 return (this.getFirst() <= e2.getFirst() && this.getLast() >= e2.getLast());
00102 }
00103
00105 public boolean subset(ModuleElement e2) {
00106 return (this.getFirst() >= e2.getFirst() && this.getLast() <= e2.getLast());
00107 }
00108
00110 public boolean overlaps(ModuleElement e2) {
00111 return (this.getFirst()<=e2.getLast() && this.getFirst()>=e2.getFirst())
00112 || (this.getLast()<=e2.getLast() && this.getLast()>=e2.getFirst());
00113 }
00114
00115 public String getClassName() {
00116 return "SctData.ModuleElement";
00117 }
00118
00119 public static ModuleElement read(IStream s, ObjectManager o) throws java.io.IOException {
00120 int first = s.readInt("FirstChannel");
00121 int last = s.readInt("LastChannel");
00122 return new ModuleElement(first, last);
00123 }
00124
00125 public void write(OStream s, ObjectManager o) throws java.io.IOException {
00126 s.writeInt("FirstChannel", first, false);
00127 s.writeInt("LastChannel", last, false);
00128 }
00129
00130 private int first;
00131 private int last;
00132 }