area_business.cpp 2.0 KB

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