queue.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright(C) 2021 Alibaba Communications Inc.
  4. * Author: David Li <liyong.li@alibaba-inc.com>
  5. */
  6. /*
  7. * queue management
  8. *
  9. */
  10. #pragma once
  11. #ifndef _QUEUE_H
  12. #define _QUEUE_H
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. #ifndef bool
  17. #define bool int
  18. #endif
  19. #ifndef true
  20. #define true 1
  21. #endif
  22. #ifndef false
  23. #define false 0
  24. #endif
  25. typedef int(*QueueIncreased)(void* queue, char data);
  26. typedef struct _QueueNode{
  27. char data;
  28. struct _QueueNode* next;
  29. struct _QueueNode* prior;
  30. }QueueNode;
  31. typedef struct _Queue{
  32. QueueNode* head;
  33. QueueNode* tail;
  34. unsigned long length;
  35. QueueIncreased onQueueIncreased;
  36. }Queue;
  37. Queue* Queue_Init(QueueIncreased queueIncreasedEvent);
  38. int Queue_AddToHead(Queue* queue, char data);
  39. int Queue_AddToTail(Queue* queue, char data);
  40. char Queue_GetFromHead(Queue* queue);
  41. char Queue_GetFromTail(Queue* queue);
  42. char Queue_QueryAt(Queue* queue, unsigned long index);
  43. void Queue_Free(Queue* queue,bool isFreeData);
  44. int OnQueueIncreasedEvent(void* queue, char data);
  45. #ifdef __cplusplus
  46. }
  47. #endif
  48. #endif