111 if(orChannel)
return nullptr;
112 if(hpbin->isValid()==
false)
return nullptr;
114 TGCChannelSLBOut* slbout =
nullptr;
117 TGCModuleId* hpb = hpbin->getModule();
120 if(!hpb)
return nullptr;
125 if(!mapId)
return nullptr;
139 TGCModuleId* slb =
nullptr;
154 blockInHPB = hpbin->getBlock();
155 nSlb = hpbin->getChannel()/(numOfBlock*2);
156 port = blockInHPB*slbInBlock+nSlb;
157 size = mapId->size();
159 if(mapId->connector(
i)==port){
160 slb = mapId->popModuleId(
i);
164 blockInSlb = (hpbin->getChannel() - nSlb*(numOfBlock*2))/2;
165 posInHpb = (hpbin->getChannel() - (numOfBlock*2)*nSlb)%2;
166 channel = (chInBlock/2)*posInHpb;
171 blockInHPB = hpbin->getBlock();
172 nSlb = hpbin->getChannel()/(numOfBlock*2);
173 port = blockInHPB*slbInBlock+nSlb;
174 size = mapId->size();
176 if(mapId->connector(
i)== -1*port){
177 slb = mapId->popModuleId(
i);
181 blockInSlb = (hpbin->getChannel() - nSlb*(numOfBlock*2))/2;
182 posInHpb = (hpbin->getChannel() - (numOfBlock*2)*nSlb)%2;
183 channel = (chInBlock/2)*posInHpb;
187 blockInHPB = hpbin->getBlock();
188 if(blockInHPB==0 && hpbin->getChannel()<numOfBlock) port=1;
190 size = mapId->size();
192 if(mapId->connector(
i)== -1*port){
193 slb = mapId->popModuleId(
i);
197 blockInSlb = (hpbin->getChannel())%numOfBlock;
198 if(blockInHPB == 1 && hpbin->getChannel() >= numOfBlock) blockInSlb = blockInSlb + numOfBlock/2;
207 delete mapId; mapId =
nullptr;
208 if(!slb)
return nullptr;
213 int SLBID = slb->getId();
214 if((chInBlock*blockInSlb+
channel)>chInBlock*numOfBlock){
218 }
else if(
channel > chInBlock){
223 slbout =
new TGCChannelSLBOut(slb->getSideType(),
225 slb->getRegionType(),