Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * rmgrdesc_utils.c
4 : * Support functions for rmgrdesc routines
5 : *
6 : * Copyright (c) 2023-2024, PostgreSQL Global Development Group
7 : *
8 : *
9 : * IDENTIFICATION
10 : * src/backend/access/rmgrdesc/rmgrdesc_utils.c
11 : *
12 : *-------------------------------------------------------------------------
13 : */
14 : #include "postgres.h"
15 :
16 : #include "access/rmgrdesc_utils.h"
17 : #include "storage/off.h"
18 :
19 : /*
20 : * Helper function to print an array, in the format described in the
21 : * README.
22 : */
23 : void
24 158 : array_desc(StringInfo buf, void *array, size_t elem_size, int count,
25 : void (*elem_desc) (StringInfo buf, void *elem, void *data),
26 : void *data)
27 : {
28 158 : if (count == 0)
29 : {
30 0 : appendStringInfoString(buf, " []");
31 0 : return;
32 : }
33 158 : appendStringInfoString(buf, " [");
34 976 : for (int i = 0; i < count; i++)
35 : {
36 818 : elem_desc(buf, (char *) array + elem_size * i, data);
37 818 : if (i < count - 1)
38 660 : appendStringInfoString(buf, ", ");
39 : }
40 158 : appendStringInfoChar(buf, ']');
41 : }
42 :
43 : void
44 718 : offset_elem_desc(StringInfo buf, void *offset, void *data)
45 : {
46 718 : appendStringInfo(buf, "%u", *(OffsetNumber *) offset);
47 718 : }
48 :
49 : void
50 84 : redirect_elem_desc(StringInfo buf, void *offset, void *data)
51 : {
52 84 : OffsetNumber *new_offset = (OffsetNumber *) offset;
53 :
54 84 : appendStringInfo(buf, "%u->%u", new_offset[0], new_offset[1]);
55 84 : }
56 :
57 : void
58 0 : oid_elem_desc(StringInfo buf, void *relid, void *data)
59 : {
60 0 : appendStringInfo(buf, "%u", *(Oid *) relid);
61 0 : }
|