2
0

dsi_response_queue.hpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. This software is subject to the license described in the License.txt file
  3. included with this software distribution. You may not use this file except in compliance
  4. with this license.
  5. Copyright (c) Dynastream Innovations Inc. 2014
  6. All rights reserved.
  7. */
  8. #if !defined(DSI_RESPONSE_QUEUE_H)
  9. #define DSI_RESPONSE_QUEUE_H
  10. /////////////////////////////////////////////////////////////
  11. // Internal Response Queue
  12. /////////////////////////////////////////////////////////////
  13. //TODO //TTA Why not just use std:Queue?
  14. // !! IMPORTANT: Any Response types that make use of this queue must always implement NONE = 0
  15. template<typename ResponseType>
  16. class DSIResponseQueue
  17. {
  18. public:
  19. DSIResponseQueue()
  20. {
  21. pstFront = (Item*)NULL;
  22. pstLast = (Item*)NULL;
  23. }
  24. ~DSIResponseQueue()
  25. {
  26. this->Clear();
  27. }
  28. void AddResponse(ResponseType tResponse_)
  29. {
  30. if(!this->isEmpty())
  31. {
  32. pstLast->next = new Item(tResponse_);
  33. pstLast = pstLast->next;
  34. }
  35. else
  36. {
  37. pstLast = new Item(tResponse_);
  38. pstFront = pstLast;
  39. }
  40. }
  41. ResponseType GetResponse()
  42. {
  43. ResponseType tResponse;
  44. if(!this->isEmpty())
  45. {
  46. tResponse = pstFront->tResponse;
  47. Item* pstNewFront = pstFront->next;
  48. delete pstFront;
  49. pstFront = pstNewFront;
  50. if(pstFront == NULL)
  51. pstLast = (Item*)NULL;
  52. }
  53. else
  54. tResponse = (ResponseType) 0; // !! Response types must always implement NONE = 0
  55. return tResponse;
  56. }
  57. BOOL isEmpty()
  58. {
  59. return (pstFront == NULL);
  60. }
  61. void Clear()
  62. {
  63. Item* pstCur = pstFront;
  64. Item* pstLastCur = pstCur;
  65. while(pstCur != NULL)
  66. {
  67. pstCur = pstCur->next;
  68. delete pstLastCur;
  69. pstLastCur = pstCur;
  70. }
  71. pstFront = (Item*)NULL;
  72. pstLast = (Item*)NULL;
  73. }
  74. private:
  75. struct Item
  76. {
  77. Item(ResponseType tResponse_) { tResponse = tResponse_; next = (Item*)NULL; }
  78. ResponseType tResponse;
  79. Item* next;
  80. };
  81. Item* pstFront;
  82. Item* pstLast;
  83. };
  84. #endif // DSI_RESPONSE_QUEUE_H