-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrange.c
51 lines (43 loc) · 1.18 KB
/
range.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* The MIT License (MIT)
*
* Copyright (c) 2019 - 2022 TheVice
*
*/
#include "range.h"
#include "buffer.h"
ptrdiff_t range_size(const struct range* range)
{
return range_is_null_or_empty(range) ? 0 : range->finish - range->start;
}
uint8_t range_is_null_or_empty(const struct range* range)
{
return NULL == range ||
range_in_parts_is_null_or_empty(range->start, range->finish);
}
uint8_t range_in_parts_is_null_or_empty(
const uint8_t* range_start, const uint8_t* range_finish)
{
return NULL == range_start ||
NULL == range_finish ||
range_finish <= range_start;
}
uint8_t buffer_append_data_from_range(
void* storage, const struct range* data)
{
return NULL != data && NULL != data->start && NULL != data->finish &&
data->start <= data->finish &&
buffer_append(storage, data->start, range_size(data));
}
uint8_t buffer_append_range(
void* ranges, const struct range* data, ptrdiff_t data_count)
{
return buffer_append(
ranges, (const void*)data, sizeof(struct range) * data_count);
}
struct range* buffer_range_data(
const void* ranges, ptrdiff_t data_position)
{
return (struct range*)buffer_data(
ranges, sizeof(struct range) * data_position);
}