LabelSet.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #include "StdAfx.h"
  2. #include "LabelSet.h"
  3. #include <algorithm>
  4. #include <cassert>
  5. using namespace std;
  6. LabelSet::LabelSet( LPCTSTR* _pTable,int _n )
  7. {
  8. n = _n;
  9. pTable = new LPCTSTR[n];
  10. copy(_pTable,_pTable + _n,pTable);
  11. }
  12. LPCTSTR LabelSet::getLabel( int _id ) const
  13. {
  14. return pTable[_id];
  15. }
  16. LabelSet::~LabelSet()
  17. {
  18. delete [] pTable;
  19. }
  20. LabelSetEx::LabelSetEx( int _n )
  21. {
  22. n = _n;
  23. pGroup = new Switch[n];
  24. memset(pGroup,0,n * sizeof(pGroup[0]));
  25. }
  26. LabelSetEx::~LabelSetEx()
  27. {
  28. while(n--)
  29. {
  30. if(pGroup[n].s[0] == pGroup[n].s[1])
  31. delete pGroup[n].s[0];
  32. else
  33. {
  34. delete pGroup[n].s[0];
  35. delete pGroup[n].s[1];
  36. }
  37. }
  38. delete [] pGroup;
  39. }
  40. bool LabelSetEx::addSets( int id,LPCTSTR* s1,LPCTSTR* s2,int n,int at /*= 0*/ )
  41. {
  42. assert((at & ~1) == 0);
  43. if(pGroup[id].s[0] != NULL)
  44. return false;
  45. LabelSet* p = new LabelSet(s1,n);
  46. pGroup[id].s[0] = p;
  47. if(s1 == s2)
  48. pGroup[id].s[1] = p;
  49. else
  50. pGroup[id].s[1] = new LabelSet(s2,n);
  51. pGroup[id].at = at;
  52. return true;
  53. }
  54. LPCTSTR LabelSetEx::getLable( int id,int off ) const
  55. {
  56. Switch* p = pGroup + id;
  57. return p->s[p->at]->getLabel(off);
  58. }
  59. void LabelSetEx::turn( int id )
  60. {
  61. assert((pGroup->at & ~1) == 0);
  62. pGroup[id].at ^= 1;
  63. }