CResultManager.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include "basic_struct_private.h"
  3. #include "..\Identifier\schema_struct.h"
  4. #include "scan_common.h"
  5. #include "feeder.h"
  6. class CIdentifyTask;
  7. /*表示一个识别任务的【结果管理】*/
  8. class CResultManager{
  9. enum
  10. {
  11. max_result_buffer_count = 6
  12. };
  13. public:
  14. CResultManager(int buffer_len = max_result_buffer_count);
  15. ~CResultManager();
  16. void reset();
  17. void open();
  18. identify::result::OMR_RESULT * getNextResult();
  19. identify::result::OMR_RESULT * GetResult(BOOL wait);
  20. void FreeResult(identify::result::OMR_RESULT * &result);
  21. result_buffer_state * getBufferstate(void * result);
  22. void setIdentifyComplete(bool iscomplete);
  23. private:
  24. bool identify_complete;
  25. int m_buffer_len;
  26. std::vector<identify::result::OMR_RESULT> m_result_buffer;
  27. std::vector<identify::result::OMR_RESULT *> result;
  28. std::vector<result_buffer_state> m_buffer_state;
  29. int m_next_result_index;
  30. };
  31. #define MAX_UNHANDLED_PAGE 12
  32. struct UnhandledPage{
  33. bool identified;
  34. int page_index;
  35. std::string student_code;
  36. std::string student_id;
  37. identify::result::OMR_RESULT * omr_result;
  38. };
  39. struct UnhandledPageInfo{
  40. UnhandledPage unhandled_pages[MAX_UNHANDLED_PAGE];
  41. int first_unhandled_page_index;
  42. int unhandled_page_count;
  43. bool m_stop;
  44. CIdentifyTask* task;
  45. CResultManager* result;
  46. bool bOnlineCard; // 是否是在线答题卡
  47. int nSubjectID;
  48. };
  49. /*表示一个 【识别任务】*/
  50. class CIdentifyTask{
  51. public:
  52. CIdentifyTask();
  53. ~CIdentifyTask();
  54. CResultManager * getResultBufferManager();
  55. UnhandledPageInfo * getUnhandledPageManager();
  56. IFeeder * GetFeeder();
  57. void SetFeeder(IFeeder * feeder);
  58. private:
  59. IFeeder * feeder;
  60. CResultManager result;
  61. UnhandledPageInfo unhandleds;
  62. };
  63. /*表示一个 【识别任务管理】*/
  64. class CIdentifyTaskManager{
  65. public:
  66. CIdentifyTaskManager();
  67. ~CIdentifyTaskManager();
  68. //创建扫描任务
  69. CIdentifyTask* createTask();
  70. //执行任务
  71. void ExcuTask(CIdentifyTask* task);
  72. //设置主要任务
  73. void setMainTask(CIdentifyTask* task);
  74. //获取主要任务
  75. CIdentifyTask* MainTask();
  76. //获取当前正在识别的任务
  77. CIdentifyTask* getCurrentIdentifyTask();
  78. //获取下一个识别的任务
  79. CIdentifyTask* getNextIdentifyTask();
  80. //获取当前需要处理结果的任务
  81. CIdentifyTask* getCurrentHandleTask();
  82. //完成(销毁扫描任务)
  83. void doneTask(CIdentifyTask* task);
  84. private:
  85. //主要任务(task)
  86. CIdentifyTask* main_task;
  87. int idenfity_task_index;
  88. int handle_task_index;
  89. //存储所有需要执行的task
  90. std::vector<CIdentifyTask* > tasks;
  91. //存储所有已经创建的task
  92. std::vector<CIdentifyTask* > tasks0;
  93. };