Skip to content

Commit b916f2b

Browse files
Rework bbuff code with cleanups. (#248)
Signed-off-by: Samuel K. Gutierrez <[email protected]>
1 parent 3e67485 commit b916f2b

10 files changed

+317
-332
lines changed

src/quo-vadis-pthread.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ qv_pthread_scopes_free(
129129
return QV_ERR_INVLD_ARG;
130130
}
131131
try {
132-
qvi_scope_thfree(&scopes, nscopes);
132+
qvi_scope_thdelete(&scopes, nscopes);
133133
return QV_SUCCESS;
134134
}
135135
qvi_catch_and_return();

src/qvi-bbuff-rmi.h

+26-26
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
#define QVI_BBUFF_RMI_H
3131

3232
#include "qvi-common.h"
33-
#include "qvi-bbuff.h"
33+
#include "qvi-bbuff.h" // IWYU pragma: keep
3434
#include "qvi-hwloc.h"
3535
#include "qvi-hwpool.h"
3636

@@ -299,7 +299,7 @@ qvi_bbuff_rmi_pack_item(
299299
qvi_bbuff_t *buff,
300300
size_t data
301301
) {
302-
return qvi_bbuff_append(buff, &data, sizeof(data));
302+
return buff->append(&data, sizeof(data));
303303
}
304304

305305
/**
@@ -310,7 +310,7 @@ qvi_bbuff_rmi_pack_item(
310310
qvi_bbuff_t *buff,
311311
int data
312312
) {
313-
return qvi_bbuff_append(buff, &data, sizeof(data));
313+
return buff->append(&data, sizeof(data));
314314
}
315315

316316
/**
@@ -322,7 +322,7 @@ qvi_bbuff_rmi_pack_item(
322322
qv_scope_create_hints_t data
323323
) {
324324
const int dai = (int)data;
325-
return qvi_bbuff_append(buff, &dai, sizeof(dai));
325+
return buff->append(&dai, sizeof(dai));
326326
}
327327

328328
/**
@@ -334,7 +334,7 @@ qvi_bbuff_rmi_pack_item(
334334
qv_hw_obj_type_t data
335335
) {
336336
const int dai = (int)data;
337-
return qvi_bbuff_append(buff, &dai, sizeof(dai));
337+
return buff->append(&dai, sizeof(dai));
338338
}
339339

340340
/**
@@ -346,7 +346,7 @@ qvi_bbuff_rmi_pack_item(
346346
qv_device_id_type_t data
347347
) {
348348
const int dai = (int)data;
349-
return qvi_bbuff_append(buff, &dai, sizeof(dai));
349+
return buff->append(&dai, sizeof(dai));
350350
}
351351

352352
/**
@@ -358,7 +358,7 @@ qvi_bbuff_rmi_pack_item(
358358
qv_scope_intrinsic_t data
359359
) {
360360
const int dai = (int)data;
361-
return qvi_bbuff_append(buff, &dai, sizeof(dai));
361+
return buff->append(&dai, sizeof(dai));
362362
}
363363

364364
#if QVI_SIZEOF_INT != QVI_SIZEOF_PID_T
@@ -371,7 +371,7 @@ qvi_bbuff_rmi_pack_item(
371371
pid_t data
372372
) {
373373
const int dai = (int)data;
374-
return qvi_bbuff_append(buff, &dai, sizeof(dai));
374+
return buff->append(&dai, sizeof(dai));
375375
}
376376
#endif
377377

@@ -380,7 +380,7 @@ qvi_bbuff_rmi_pack_item_impl(
380380
qvi_bbuff_t *buff,
381381
cstr_t data
382382
) {
383-
return qvi_bbuff_append(buff, data, strlen(data) + 1);
383+
return buff->append(data, strlen(data) + 1);
384384
}
385385

386386
/**
@@ -438,9 +438,9 @@ qvi_bbuff_rmi_pack_item(
438438
// We store size then data so unpack has an easier time, but keep
439439
// the user interface order as data then size.
440440
size_t dsize = data.second;
441-
const int rc = qvi_bbuff_append(buff, &dsize, sizeof(dsize));
442-
if (rc != QV_SUCCESS) return rc;
443-
return qvi_bbuff_append(buff, data.first, dsize);
441+
const int rc = buff->append(&dsize, sizeof(dsize));
442+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
443+
return buff->append(data.first, dsize);
444444
}
445445

446446
/**
@@ -453,8 +453,8 @@ qvi_bbuff_rmi_pack_item_impl(
453453
) {
454454
// Protect against null data.
455455
if (qvi_unlikely(!data)) {
456-
return qvi_bbuff_append(
457-
buff, QV_BUFF_RMI_NULL_CPUSET,
456+
return buff->append(
457+
QV_BUFF_RMI_NULL_CPUSET,
458458
strlen(QV_BUFF_RMI_NULL_CPUSET) + 1
459459
);
460460
}
@@ -463,7 +463,7 @@ qvi_bbuff_rmi_pack_item_impl(
463463
int rc = qvi_hwloc_bitmap_asprintf(data, &datas);
464464
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
465465
// We are sending the string representation of the cpuset.
466-
rc = qvi_bbuff_append(buff, datas, strlen(datas) + 1);
466+
rc = buff->append(datas, strlen(datas) + 1);
467467
free(datas);
468468
return rc;
469469
}
@@ -511,7 +511,7 @@ qvi_bbuff_rmi_pack_item(
511511
) {
512512
// Pack hints.
513513
const int rc = qvi_bbuff_rmi_pack_item(buff, data.hints);
514-
if (rc != QV_SUCCESS) return rc;
514+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
515515

516516
return qvi_bbuff_rmi_pack_item(buff, data.cpuset);
517517
}
@@ -524,25 +524,24 @@ qvi_bbuff_rmi_pack_item(
524524
qvi_bbuff_t *buff,
525525
qvi_hwpool_dev_s *data
526526
) {
527+
// TODO(skg) Move to device code.
527528
// Pack device hints.
528529
int rc = qvi_bbuff_rmi_pack_item(buff, data->hints);
529-
if (rc != QV_SUCCESS) return rc;
530+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
530531
// Pack device affinity.
531532
rc = qvi_bbuff_rmi_pack_item(buff, data->affinity);
532-
if (rc != QV_SUCCESS) return rc;
533+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
533534
// Pack device type.
534535
rc = qvi_bbuff_rmi_pack_item(buff, data->type);
535-
if (rc != QV_SUCCESS) return rc;
536+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
536537
// Pack device ID.
537538
rc = qvi_bbuff_rmi_pack_item(buff, data->m_id);
538-
if (rc != QV_SUCCESS) return rc;
539+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
539540
// Pack device PCI bus ID.
540541
rc = qvi_bbuff_rmi_pack_item(buff, data->pci_bus_id);
541-
if (rc != QV_SUCCESS) return rc;
542+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
542543
// Pack device UUID.
543-
rc = qvi_bbuff_rmi_pack_item(buff, data->uuid);
544-
if (rc != QV_SUCCESS) return rc;
545-
return rc;
544+
return qvi_bbuff_rmi_pack_item(buff, data->uuid);
546545
}
547546

548547
/**
@@ -583,7 +582,7 @@ qvi_bbuff_rmi_pack(
583582
Types&&... args
584583
) {
585584
const int rc = qvi_bbuff_rmi_pack_item(buff, std::forward<T>(arg));
586-
if (rc != QV_SUCCESS) return rc;
585+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
587586
return qvi_bbuff_rmi_pack(buff, std::forward<Types>(args)...);
588587
}
589588

@@ -871,6 +870,7 @@ qvi_bbuff_rmi_unpack_item(
871870
byte_t *buffpos,
872871
size_t *bytes_written
873872
) {
873+
// TODO(skg) Move to dev code.
874874
size_t bw = 0, total_bw = 0;
875875

876876
int rc = qvi_bbuff_rmi_unpack_item(
@@ -957,7 +957,7 @@ qvi_bbuff_rmi_unpack(
957957
(byte_t *)data,
958958
&bytes_written
959959
);
960-
if (rc != QV_SUCCESS) return rc;
960+
if (qvi_unlikely(rc != QV_SUCCESS)) return rc;
961961
pos += bytes_written;
962962
return qvi_bbuff_rmi_unpack(pos, std::forward<Types>(args)...);
963963
}

src/qvi-bbuff.cc

+55-69
Original file line numberDiff line numberDiff line change
@@ -17,98 +17,84 @@
1717
#include "qvi-bbuff.h"
1818
#include "qvi-utils.h"
1919

20-
struct qvi_bbuff_s {
21-
/** Minimum growth in bytes for resizes, etc. */
22-
static constexpr size_t min_growth = 256;
23-
/** Current capacity of buffer. */
24-
size_t capacity = 0;
25-
/** Amount of data already stored. */
26-
size_t size = 0;
27-
/** Pointer to data backing store. */
28-
void *data = nullptr;
29-
/** Constructor. */
30-
qvi_bbuff_s(void)
31-
{
32-
capacity = min_growth;
33-
data = calloc(capacity, sizeof(byte_t));
34-
if (qvi_unlikely(!data)) throw qvi_runtime_error();
35-
}
36-
/** Copy constructor. */
37-
qvi_bbuff_s(
38-
const qvi_bbuff_s &src
39-
) : qvi_bbuff_s()
40-
{
41-
const int rc = qvi_bbuff_append(this, src.data, src.size);
42-
if (qvi_unlikely(rc != QV_SUCCESS)) throw qvi_runtime_error();
43-
}
44-
/** Destructor. */
45-
~qvi_bbuff_s(void)
46-
{
47-
if (data) free(data);
48-
}
49-
};
50-
51-
int
52-
qvi_bbuff_new(
53-
qvi_bbuff_t **buff
54-
) {
55-
return qvi_new(buff);
20+
qvi_bbuff_s::qvi_bbuff_s(void)
21+
{
22+
m_capacity = s_min_growth;
23+
m_data = calloc(m_capacity, sizeof(byte_t));
24+
if (qvi_unlikely(!m_data)) throw qvi_runtime_error();
5625
}
5726

58-
int
59-
qvi_bbuff_dup(
60-
const qvi_bbuff_t *const src,
61-
qvi_bbuff_t **buff
62-
) {
63-
return qvi_dup(*src, buff);
27+
qvi_bbuff_s::qvi_bbuff_s(
28+
const qvi_bbuff_s &src
29+
) : qvi_bbuff_s()
30+
{
31+
const int rc = append(src.m_data, src.m_size);
32+
if (qvi_unlikely(rc != QV_SUCCESS)) throw qvi_runtime_error();
6433
}
6534

66-
void
67-
qvi_bbuff_delete(
68-
qvi_bbuff_t **buff
69-
) {
70-
qvi_delete(buff);
35+
qvi_bbuff_s::~qvi_bbuff_s(void)
36+
{
37+
if (m_data) free(m_data);
7138
}
7239

73-
void *
74-
qvi_bbuff_data(
75-
qvi_bbuff_t *buff
76-
) {
77-
return buff->data;
40+
size_t
41+
qvi_bbuff_s::size(void) const
42+
{
43+
return m_size;
7844
}
7945

80-
size_t
81-
qvi_bbuff_size(
82-
const qvi_bbuff_t *buff
83-
) {
84-
return buff->size;
46+
void *
47+
qvi_bbuff_s::data(void)
48+
{
49+
return m_data;
8550
}
8651

8752
int
88-
qvi_bbuff_append(
89-
qvi_bbuff_t *buff,
53+
qvi_bbuff_s::append(
9054
const void *const data,
9155
size_t size
9256
) {
93-
const size_t req_capacity = size + buff->size;
94-
if (req_capacity > buff->capacity) {
57+
const size_t req_capacity = size + m_size;
58+
if (req_capacity > m_capacity) {
9559
// New capacity.
96-
const size_t new_capacity = req_capacity + buff->min_growth;
60+
const size_t new_capacity = req_capacity + s_min_growth;
9761
void *new_data = calloc(new_capacity, sizeof(byte_t));
9862
if (qvi_unlikely(!new_data)) return QV_ERR_OOR;
9963
// Memory allocation successful.
100-
memmove(new_data, buff->data, buff->size);
101-
free(buff->data);
102-
buff->capacity = new_capacity;
103-
buff->data = new_data;
64+
memmove(new_data, m_data, m_size);
65+
free(m_data);
66+
m_capacity = new_capacity;
67+
m_data = new_data;
10468
}
105-
byte_t *dest = (byte_t *)buff->data;
106-
dest += buff->size;
69+
byte_t *dest = (byte_t *)m_data;
70+
dest += m_size;
10771
memmove(dest, data, size);
108-
buff->size += size;
72+
m_size += size;
10973
return QV_SUCCESS;
11074
}
11175

76+
int
77+
qvi_bbuff_new(
78+
qvi_bbuff_t **buff
79+
) {
80+
return qvi_new(buff);
81+
}
82+
83+
int
84+
qvi_bbuff_dup(
85+
const qvi_bbuff_t &src,
86+
qvi_bbuff_t **buff
87+
) {
88+
return qvi_dup(src, buff);
89+
}
90+
91+
void
92+
qvi_bbuff_delete(
93+
qvi_bbuff_t **buff
94+
) {
95+
qvi_delete(buff);
96+
}
97+
11298
/*
11399
* vim: ft=cpp ts=4 sts=4 sw=4 expandtab
114100
*/

0 commit comments

Comments
 (0)