Skip to content

Commit f519be8

Browse files
committedMar 5, 2025··
separate check kind between read and peek
1 parent 5255e48 commit f519be8

File tree

2 files changed

+69
-13
lines changed

2 files changed

+69
-13
lines changed
 

‎src/buffer_io.c

+67-12
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ t_ion_result_code ion_buffer_io_peek_kind(t_ion_buffer *self,
9292
return RESULT_OK;
9393
}
9494

95-
t_ion_result_code ion_buffer_io_check_kind(t_ion_buffer *self,
96-
t_ion_object_kind expected) {
95+
t_ion_result_code ion_buffer_io_read_check_kind(t_ion_buffer *self,
96+
t_ion_object_kind expected) {
9797
t_ion_result_code result;
9898
t_ion_buffer_state *state;
9999
t_ion_buffer_state_io_entry **entry_ptr;
@@ -147,6 +147,61 @@ t_ion_result_code ion_buffer_io_check_kind(t_ion_buffer *self,
147147
return RESULT_OK;
148148
}
149149

150+
t_ion_result_code ion_buffer_io_peek_check_kind(t_ion_buffer *self,
151+
t_ion_object_kind expected) {
152+
t_ion_result_code result;
153+
t_ion_buffer_state *state;
154+
t_ion_buffer_state_io_entry **entry_ptr;
155+
t_ion_buffer_state_io_entry *entry;
156+
t_ion_object_kind value;
157+
uint8_t index;
158+
uint8_t flag;
159+
160+
if (self == NULL)
161+
return RESULT_ERROR;
162+
163+
state = self->state_p;
164+
if (state->entry_level < 0) {
165+
flag = true;
166+
} else {
167+
result =
168+
vector_get(state->entry_list, (void **)&entry_ptr, state->entry_level);
169+
if (result != RESULT_OK) {
170+
return result;
171+
}
172+
173+
entry = *entry_ptr;
174+
175+
switch (entry->kind) {
176+
case ARR: {
177+
flag = false;
178+
break;
179+
}
180+
181+
default: {
182+
flag = true;
183+
break;
184+
}
185+
}
186+
}
187+
188+
if (!flag) {
189+
return RESULT_OK;
190+
}
191+
192+
result = ion_buffer_peek(self, &index, sizeof(index));
193+
if (result != RESULT_OK) {
194+
return result;
195+
}
196+
197+
value = ion_object_kind_from_index(index);
198+
if (value != expected) {
199+
return RESULT_ERROR;
200+
}
201+
202+
return RESULT_OK;
203+
}
204+
150205
t_ion_result_code ion_buffer_io_read_data(t_ion_buffer *self,
151206
t_ion_object_kind kind, void *dst) {
152207
if (self == NULL)
@@ -317,7 +372,7 @@ t_ion_result_code ion_buffer_io_write_list_close(t_ion_buffer *self) {
317372
t_ion_result_code ion_buffer_io_read_u0(t_ion_buffer *self) {
318373
t_ion_result_code result;
319374

320-
result = ion_buffer_io_check_kind(self, U0);
375+
result = ion_buffer_io_read_check_kind(self, U0);
321376
if (result != RESULT_OK) {
322377
return result;
323378
}
@@ -333,7 +388,7 @@ t_ion_result_code ion_buffer_io_read_u0(t_ion_buffer *self) {
333388
t_ion_result_code ion_buffer_io_read_u8(t_ion_buffer *self, uint8_t *value) {
334389
t_ion_result_code result;
335390

336-
result = ion_buffer_io_check_kind(self, U8);
391+
result = ion_buffer_io_read_check_kind(self, U8);
337392
if (result != RESULT_OK) {
338393
return result;
339394
}
@@ -354,7 +409,7 @@ t_ion_result_code ion_buffer_io_read_u8(t_ion_buffer *self, uint8_t *value) {
354409
t_ion_result_code ion_buffer_io_read_u16(t_ion_buffer *self, uint16_t *value) {
355410
t_ion_result_code result;
356411

357-
result = ion_buffer_io_check_kind(self, U16);
412+
result = ion_buffer_io_read_check_kind(self, U16);
358413
if (result != RESULT_OK) {
359414
return result;
360415
}
@@ -375,7 +430,7 @@ t_ion_result_code ion_buffer_io_read_u16(t_ion_buffer *self, uint16_t *value) {
375430
t_ion_result_code ion_buffer_io_read_u32(t_ion_buffer *self, uint32_t *value) {
376431
t_ion_result_code result;
377432

378-
result = ion_buffer_io_check_kind(self, U32);
433+
result = ion_buffer_io_read_check_kind(self, U32);
379434
if (result != RESULT_OK) {
380435
return result;
381436
}
@@ -396,7 +451,7 @@ t_ion_result_code ion_buffer_io_read_u32(t_ion_buffer *self, uint32_t *value) {
396451
t_ion_result_code ion_buffer_io_read_u64(t_ion_buffer *self, uint64_t *value) {
397452
t_ion_result_code result;
398453

399-
result = ion_buffer_io_check_kind(self, U64);
454+
result = ion_buffer_io_read_check_kind(self, U64);
400455
if (result != RESULT_OK) {
401456
return result;
402457
}
@@ -488,7 +543,7 @@ t_ion_result_code ion_buffer_io_peek_data(t_ion_buffer *self,
488543
t_ion_result_code ion_buffer_io_peek_u0(t_ion_buffer *self) {
489544
t_ion_result_code result;
490545

491-
result = ion_buffer_io_check_kind(self, U0);
546+
result = ion_buffer_io_peek_check_kind(self, U0);
492547
if (result != RESULT_OK) {
493548
return result;
494549
}
@@ -504,7 +559,7 @@ t_ion_result_code ion_buffer_io_peek_u0(t_ion_buffer *self) {
504559
t_ion_result_code ion_buffer_io_peek_u8(t_ion_buffer *self, uint8_t *value) {
505560
t_ion_result_code result;
506561

507-
result = ion_buffer_io_check_kind(self, U8);
562+
result = ion_buffer_io_peek_check_kind(self, U8);
508563
if (result != RESULT_OK) {
509564
return result;
510565
}
@@ -525,7 +580,7 @@ t_ion_result_code ion_buffer_io_peek_u8(t_ion_buffer *self, uint8_t *value) {
525580
t_ion_result_code ion_buffer_io_peek_u16(t_ion_buffer *self, uint16_t *value) {
526581
t_ion_result_code result;
527582

528-
result = ion_buffer_io_check_kind(self, U16);
583+
result = ion_buffer_io_peek_check_kind(self, U16);
529584
if (result != RESULT_OK) {
530585
return result;
531586
}
@@ -546,7 +601,7 @@ t_ion_result_code ion_buffer_io_peek_u16(t_ion_buffer *self, uint16_t *value) {
546601
t_ion_result_code ion_buffer_io_peek_u32(t_ion_buffer *self, uint32_t *value) {
547602
t_ion_result_code result;
548603

549-
result = ion_buffer_io_check_kind(self, U32);
604+
result = ion_buffer_io_peek_check_kind(self, U32);
550605
if (result != RESULT_OK) {
551606
return result;
552607
}
@@ -567,7 +622,7 @@ t_ion_result_code ion_buffer_io_peek_u32(t_ion_buffer *self, uint32_t *value) {
567622
t_ion_result_code ion_buffer_io_peek_u64(t_ion_buffer *self, uint64_t *value) {
568623
t_ion_result_code result;
569624

570-
result = ion_buffer_io_check_kind(self, U64);
625+
result = ion_buffer_io_peek_check_kind(self, U64);
571626
if (result != RESULT_OK) {
572627
return result;
573628
}

‎src/ion.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ t_ion_result_code ion_buffer_io_write_kind(t_ion_buffer *self, t_ion_object_kind
123123
t_ion_result_code ion_buffer_io_write_data(t_ion_buffer *self, t_ion_object_kind kind, void *src);
124124
t_ion_result_code ion_buffer_io_read_kind(t_ion_buffer *self, t_ion_object_kind *value);
125125
t_ion_result_code ion_buffer_io_peek_kind(t_ion_buffer *self, t_ion_object_kind *value);
126-
t_ion_result_code ion_buffer_io_check_kind(t_ion_buffer *self, t_ion_object_kind expected);
126+
t_ion_result_code ion_buffer_io_read_check_kind(t_ion_buffer *self, t_ion_object_kind expected);
127+
t_ion_result_code ion_buffer_io_peek_check_kind(t_ion_buffer *self, t_ion_object_kind expected);
127128
t_ion_result_code ion_buffer_io_write_u0(t_ion_buffer *self);
128129
t_ion_result_code ion_buffer_io_write_u8(t_ion_buffer *self, uint8_t value);
129130
t_ion_result_code ion_buffer_io_write_u16(t_ion_buffer *self, uint16_t value);

0 commit comments

Comments
 (0)
Please sign in to comment.