#include <string.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #ifndef CHAR_QUEUE_H #define CHAR_QUEUE_H #define QUEUE_INIT_SIZE 128 typedef struct CharQueue_t{ uint16_t size; uint16_t capacity; unsigned char *data; void (*append) (struct CharQueue_t *, unsigned char); void (*destroy) (struct CharQueue_t *); unsigned char (*get) (struct CharQueue_t *, uint16_t); unsigned char (*next) (struct CharQueue_t *); } CharQueue_t; CharQueue_t *CharQueueInit(); void CharQueueAppend(struct CharQueue_t *queue, unsigned char value); void CharQueueDestroy(struct CharQueue_t *queue); unsigned char CharQueueGet(struct CharQueue_t *queue, uint16_t idx); unsigned char CharQueueNext(struct CharQueue_t *queue); #endif /* CHAR_QUEUE_H */ CharQueue_t *CharQueueInit() { // Initialize size and capacity queue->size = 0; queue->capacity = QUEUE_INIT_SIZE; queue->append = CharQueueAppend; queue->destroy = CharQueueDestroy; queue->get = CharQueueGet; queue->next = CharQueueNext; return queue; } void CharQueueAppend(struct CharQueue_t *queue, unsigned char value) { // Resize the queue if it's at capacity if (queue->size >= queue->capacity) { queue->capacity *= 2; } queue->data[queue->size] = value; queue->size++; } void CharQueueDestroy(struct CharQueue_t *queue) { } unsigned char CharQueueGet(struct CharQueue_t *queue, uint16_t idx) { if (idx >= queue->size || idx < 0) { return 0; } return queue->data[idx]; } unsigned char CharQueueNext(struct CharQueue_t *queue) { char data = queue->data[0]; queue->size = queue->size - 1; *queue->data++; return data; } int main(void) { CharQueue_t *queue = CharQueueInit(); int i; for (i = 0; i < 256; i++) { queue->append(queue, i); } for (i = 0; i < 256; i++) { } return 0; }
Standard input is empty
Queue Size is 256 #0 in queue: 0x0 #1 in queue: 0x1 #2 in queue: 0x2 #3 in queue: 0x3 #4 in queue: 0x4 #5 in queue: 0x5 #6 in queue: 0x6 #7 in queue: 0x7 #8 in queue: 0x8 #9 in queue: 0x9 #10 in queue: 0x10 #11 in queue: 0x11 #12 in queue: 0x12 #13 in queue: 0x13 #14 in queue: 0x14 #15 in queue: 0x15 #16 in queue: 0x16 #17 in queue: 0x17 #18 in queue: 0x18 #19 in queue: 0x19 #20 in queue: 0x20 #21 in queue: 0x21 #22 in queue: 0x22 #23 in queue: 0x23 #24 in queue: 0x24 #25 in queue: 0x25 #26 in queue: 0x26 #27 in queue: 0x27 #28 in queue: 0x28 #29 in queue: 0x29 #30 in queue: 0x30 #31 in queue: 0x31 #32 in queue: 0x32 #33 in queue: 0x33 #34 in queue: 0x34 #35 in queue: 0x35 #36 in queue: 0x36 #37 in queue: 0x37 #38 in queue: 0x38 #39 in queue: 0x39 #40 in queue: 0x40 #41 in queue: 0x41 #42 in queue: 0x42 #43 in queue: 0x43 #44 in queue: 0x44 #45 in queue: 0x45 #46 in queue: 0x46 #47 in queue: 0x47 #48 in queue: 0x48 #49 in queue: 0x49 #50 in queue: 0x50 #51 in queue: 0x51 #52 in queue: 0x52 #53 in queue: 0x53 #54 in queue: 0x54 #55 in queue: 0x55 #56 in queue: 0x56 #57 in queue: 0x57 #58 in queue: 0x58 #59 in queue: 0x59 #60 in queue: 0x60 #61 in queue: 0x61 #62 in queue: 0x62 #63 in queue: 0x63 #64 in queue: 0x64 #65 in queue: 0x65 #66 in queue: 0x66 #67 in queue: 0x67 #68 in queue: 0x68 #69 in queue: 0x69 #70 in queue: 0x70 #71 in queue: 0x71 #72 in queue: 0x72 #73 in queue: 0x73 #74 in queue: 0x74 #75 in queue: 0x75 #76 in queue: 0x76 #77 in queue: 0x77 #78 in queue: 0x78 #79 in queue: 0x79 #80 in queue: 0x80 #81 in queue: 0x81 #82 in queue: 0x82 #83 in queue: 0x83 #84 in queue: 0x84 #85 in queue: 0x85 #86 in queue: 0x86 #87 in queue: 0x87 #88 in queue: 0x88 #89 in queue: 0x89 #90 in queue: 0x90 #91 in queue: 0x91 #92 in queue: 0x92 #93 in queue: 0x93 #94 in queue: 0x94 #95 in queue: 0x95 #96 in queue: 0x96 #97 in queue: 0x97 #98 in queue: 0x98 #99 in queue: 0x99 #100 in queue: 0x100 #101 in queue: 0x101 #102 in queue: 0x102 #103 in queue: 0x103 #104 in queue: 0x104 #105 in queue: 0x105 #106 in queue: 0x106 #107 in queue: 0x107 #108 in queue: 0x108 #109 in queue: 0x109 #110 in queue: 0x110 #111 in queue: 0x111 #112 in queue: 0x112 #113 in queue: 0x113 #114 in queue: 0x114 #115 in queue: 0x115 #116 in queue: 0x116 #117 in queue: 0x117 #118 in queue: 0x118 #119 in queue: 0x119 #120 in queue: 0x120 #121 in queue: 0x121 #122 in queue: 0x122 #123 in queue: 0x123 #124 in queue: 0x124 #125 in queue: 0x125 #126 in queue: 0x126 #127 in queue: 0x127 #128 in queue: 0x128 #129 in queue: 0x129 #130 in queue: 0x130 #131 in queue: 0x131 #132 in queue: 0x132 #133 in queue: 0x133 #134 in queue: 0x134 #135 in queue: 0x135 #136 in queue: 0x136 #137 in queue: 0x137 #138 in queue: 0x138 #139 in queue: 0x139 #140 in queue: 0x140 #141 in queue: 0x141 #142 in queue: 0x142 #143 in queue: 0x143 #144 in queue: 0x144 #145 in queue: 0x145 #146 in queue: 0x146 #147 in queue: 0x147 #148 in queue: 0x148 #149 in queue: 0x149 #150 in queue: 0x150 #151 in queue: 0x151 #152 in queue: 0x152 #153 in queue: 0x153 #154 in queue: 0x154 #155 in queue: 0x155 #156 in queue: 0x156 #157 in queue: 0x157 #158 in queue: 0x158 #159 in queue: 0x159 #160 in queue: 0x160 #161 in queue: 0x161 #162 in queue: 0x162 #163 in queue: 0x163 #164 in queue: 0x164 #165 in queue: 0x165 #166 in queue: 0x166 #167 in queue: 0x167 #168 in queue: 0x168 #169 in queue: 0x169 #170 in queue: 0x170 #171 in queue: 0x171 #172 in queue: 0x172 #173 in queue: 0x173 #174 in queue: 0x174 #175 in queue: 0x175 #176 in queue: 0x176 #177 in queue: 0x177 #178 in queue: 0x178 #179 in queue: 0x179 #180 in queue: 0x180 #181 in queue: 0x181 #182 in queue: 0x182 #183 in queue: 0x183 #184 in queue: 0x184 #185 in queue: 0x185 #186 in queue: 0x186 #187 in queue: 0x187 #188 in queue: 0x188 #189 in queue: 0x189 #190 in queue: 0x190 #191 in queue: 0x191 #192 in queue: 0x192 #193 in queue: 0x193 #194 in queue: 0x194 #195 in queue: 0x195 #196 in queue: 0x196 #197 in queue: 0x197 #198 in queue: 0x198 #199 in queue: 0x199 #200 in queue: 0x200 #201 in queue: 0x201 #202 in queue: 0x202 #203 in queue: 0x203 #204 in queue: 0x204 #205 in queue: 0x205 #206 in queue: 0x206 #207 in queue: 0x207 #208 in queue: 0x208 #209 in queue: 0x209 #210 in queue: 0x210 #211 in queue: 0x211 #212 in queue: 0x212 #213 in queue: 0x213 #214 in queue: 0x214 #215 in queue: 0x215 #216 in queue: 0x216 #217 in queue: 0x217 #218 in queue: 0x218 #219 in queue: 0x219 #220 in queue: 0x220 #221 in queue: 0x221 #222 in queue: 0x222 #223 in queue: 0x223 #224 in queue: 0x224 #225 in queue: 0x225 #226 in queue: 0x226 #227 in queue: 0x227 #228 in queue: 0x228 #229 in queue: 0x229 #230 in queue: 0x230 #231 in queue: 0x231 #232 in queue: 0x232 #233 in queue: 0x233 #234 in queue: 0x234 #235 in queue: 0x235 #236 in queue: 0x236 #237 in queue: 0x237 #238 in queue: 0x238 #239 in queue: 0x239 #240 in queue: 0x240 #241 in queue: 0x241 #242 in queue: 0x242 #243 in queue: 0x243 #244 in queue: 0x244 #245 in queue: 0x245 #246 in queue: 0x246 #247 in queue: 0x247 #248 in queue: 0x248 #249 in queue: 0x249 #250 in queue: 0x250 #251 in queue: 0x251 #252 in queue: 0x252 #253 in queue: 0x253 #254 in queue: 0x254 #255 in queue: 0x255