00001 #include <iostream>
00002 #include "PbScIndexer.h"
00003
00004 PbScIndexer * PbScIndexer::single=0;
00005 int PbScIndexer::access_count =0;
00006
00007 PbScIndexer::PbScIndexer()
00008 {
00009 }
00010
00011 PbScIndexer::~PbScIndexer()
00012 {
00013 }
00014
00015
00016 PbScIndexer * PbScIndexer::buildPbScIndexer()
00017 {
00018 if(!single) single = new PbScIndexer();
00019 access_count++;
00020 return single;
00021 };
00022
00023
00024 int PbScIndexer::deletePbScIndexer()
00025 {
00026 if(single)
00027 {
00028 access_count--;
00029 delete single;
00030 single = 0;
00031 }
00032 return access_count;
00033 };
00034
00035
00036
00037 int
00038 PbScIndexer::xySMiSM(int x, int y)
00039 {
00040 int rv = -1;
00041
00042 if ( x >= 0 && x < 6 && y >= 0 && y < 3 )
00043 {
00044 rv = y*6 + x;
00045 }
00046
00047 return rv;
00048 }
00049
00050
00051
00052 inline void PbScIndexer::SMxySM(int i, int & x, int & y)
00053 {
00054 y = i/6;
00055 x = i-y*6;
00056 };
00057
00058
00059
00060 int PbScIndexer::SMxySMTiST(int iSM ,int xSMTower, int ySMTower)
00061 {
00062 int x, y;
00063 SMxySM(iSM, x, y);
00064 return (y*12+ySMTower)*72+x*12+xSMTower;
00065 };
00066
00067
00068
00069 int PbScIndexer::SMiSMTiST(int iSM ,int iSMTower)
00070 {
00071 int x, y, xx, yy;
00072 SMxySM(iSM, x, y);
00073 iSM144TxySM144T(iSMTower, xx, yy);
00074 return (y*12+yy)*72+x*12+xx;
00075 };
00076
00077
00078
00079
00080 void PbScIndexer::iSTxyST(int const iTower, int & xTower, int & yTower)
00081 {
00082 yTower = iTower/72;
00083 xTower = iTower%72;
00084 };
00085
00086
00087
00088 void PbScIndexer::iST_SMInd(int const iTower, int & ism, int & ismt, int & xsmt, int & ysmt)
00089 {
00090 int x, y, xsm, ysm;
00091 iSTxyST(iTower, x, y);
00092 xsm = x/12;
00093 ysm = y/12;
00094 ism = ysm*6 + xsm;
00095 xsmt = x%12;
00096 ysmt = y%12;
00097 ismt = ysmt*12+xsmt;
00098 };
00099
00101