area_business.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include <assert.h>
  2. #include "area_business.h"
  3. //#include "card_base.h"
  4. //#include "area.h"
  5. //#include "card.h"
  6. #include "area_business_car_attendance.h"
  7. #include "area_business_card_enter_or_leave.h"
  8. #include "area_business_count_checker.h"
  9. #include "area_business_forbid.h"
  10. #include "area_business_person_dwell_checker.h"
  11. #include "area_business_person_attendance.h"
  12. #include "area_business_post_area.h"
  13. #include "area_business_speed_checker.h"
  14. /*
  15. 猴车区域
  16. */
  17. struct area_business_monkey_area:area_business
  18. {
  19. virtual int area_business_type()
  20. {
  21. return 8;
  22. }
  23. };
  24. struct area_business_factory
  25. {
  26. void regist(int type,area_business* ab)
  27. {
  28. if(type>=(int)m_check_list.size())
  29. {
  30. m_check_list.resize(type+1);
  31. }
  32. assert(!m_check_list[type]);
  33. m_check_list[type].reset(ab);
  34. }
  35. std::vector<area_business*> get_check_list(int business_type)
  36. {
  37. std::vector<area_business*> check_list;
  38. for(int i=0;i<32;i++)
  39. {
  40. if(business_type==0)
  41. break;
  42. if((business_type&1)==0)
  43. continue;
  44. business_type >>= 1;
  45. check_list.push_back(m_check_list[i].get());
  46. }
  47. return std::move(check_list);
  48. }
  49. static area_business_factory& instance()
  50. {
  51. static area_business_factory _instance;
  52. return _instance;
  53. }
  54. private:
  55. std::vector<std::unique_ptr<area_business>> m_check_list;
  56. area_business_factory()
  57. {
  58. regist(1,new area_business_post_area);
  59. regist(2,new area_business_person_dwell_checker);
  60. regist(3,new area_business_count_checker);
  61. regist(4,new area_business_speed_checker);
  62. regist(5,new area_business_person_attendance);
  63. regist(6,new area_business_car_attendance);
  64. regist(7,new area_business_forbid);
  65. //regist(8,new area_business_monkey_area);
  66. regist(9,new area_business_card_enter_or_leave);
  67. }
  68. };
  69. std::vector<area_business*> area_business::get_instance_list(int business_type)
  70. {
  71. return area_business_factory::instance().get_check_list(business_type);
  72. }