File: forge.h

package info (click to toggle)
lsp-plugins 1.2.5-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 91,856 kB
  • sloc: cpp: 427,831; xml: 57,779; makefile: 9,961; php: 1,005; sh: 18
file content (182 lines) | stat: -rw-r--r-- 6,930 bytes parent folder | download
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*
 * Copyright (C) 2020 Linux Studio Plugins Project <https://lsp-plug.in/>
 *           (C) 2020 Vladimir Sadovnikov <sadko4u@gmail.com>
 *
 * This file is part of lsp-runtime-lib
 * Created on: 29 мая 2019 г.
 *
 * lsp-runtime-lib is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 *
 * lsp-runtime-lib is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with lsp-runtime-lib. If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef LSP_PLUG_IN_PROTOCOL_OSC_FORGE_H_
#define LSP_PLUG_IN_PROTOCOL_OSC_FORGE_H_

#include <lsp-plug.in/runtime/version.h>
#include <lsp-plug.in/protocol/osc/types.h>

namespace lsp
{
    namespace osc
    {
        typedef struct forge_t  forge_t;

        typedef struct forge_frame_t
        {
            forge_t        *forge;
            forge_frame_t  *parent;     // Parent forge
            forge_frame_t  *child;      // Child forge
            size_t          type;

            size_t          offset;     // Offset of the frame in the buffer
        } forge_frame_t;

        struct forge_t
        {
            uint8_t        *data;
            size_t          offset;
            size_t          capacity;
            bool            dynamic;

            size_t          refs;
            size_t          toff;       // Head of types field
            size_t          tsize;      // Size of types field
        };

        /**
         * Initialize OSC packet serializer in fixed buffer size (RT-compatible) mode
         *
         * @param ref pointer to output root frame descriptor
         * @param forge serializer structure to initialize
         * @param data pointer to the buffer
         * @param size size of the buffer
         * @return status of operation
         */
        status_t forge_begin_fixed(forge_frame_t *ref, forge_t *forge, void *data, size_t size);

        /**
         * Initialize OSC packet serializer in dynamic buffer size (non-RT-compatible) mode
         * @param ref pointer to output root frame descriptor
         * @param forge serializer structure to initialize
         * @return status of operation
         */
        status_t forge_begin_dynamic(forge_frame_t *ref, forge_t *forge, size_t reserve = 0);

        /**
         * Begin serialization of OSC bundle
         * @param child pointer to output bundle frame descriptor
         * @param ref current frame descriptor
         * @param tag OSC time tag
         * @return status of operation
         */
        status_t forge_begin_bundle(forge_frame_t *child, forge_frame_t *ref, uint64_t tag);

        /**
         * Begin serialization of OSC message
         * @param child pointer to output message frame descriptor
         * @param ref current frame descriptor
         * @param address the OSC address string
         * @return status of operation
         */
        status_t forge_begin_message(forge_frame_t *child, forge_frame_t *ref, const char *address);

        /**
         * Begin serialization of OSC message
         * @param child pointer to output message frame descriptor
         * @param ref current frame descriptor
         * @param prefix prefix to add to address string
         * @param address the OSC address string
         * @return status of operation
         */
        status_t forge_begin_message(forge_frame_t *child, forge_frame_t *ref, const char *prefix, const char *address);

        /**
         * Forge message
         * @param ref forge reference
         * @param address message address
         * @param params message parameters
         * @param args list of arguments
         * @return status of operation
         */
        status_t forge_message(forge_frame_t *ref, const char *address, const char *params...);

        /**
         * Forge message
         * @param ref forge reference
         * @param address message address
         * @param params message parameters
         * @param args list of arguments
         * @return status of operation
         */
        status_t forge_messagev(forge_frame_t *ref, const char *address, const char *params, va_list args);

        /**
         * Begin serialization of array within OSC message
         * @param child pointer to output array frame descriptor
         * @param ref current frame descriptor
         * @return status of operation
         */
        status_t forge_begin_array(forge_frame_t *child, forge_frame_t *ref);

        status_t forge_int32(forge_frame_t *ref, int32_t value);
        status_t forge_float32(forge_frame_t *ref, float value);
        status_t forge_string(forge_frame_t *ref, const char *s);
        status_t forge_blob(forge_frame_t *ref, const void *data, size_t bytes);
        status_t forge_int64(forge_frame_t *ref, int64_t value);
        status_t forge_double64(forge_frame_t *ref, double value);
        status_t forge_time_tag(forge_frame_t *ref, uint64_t value);
        status_t forge_type(forge_frame_t *ref, const char *s);
        status_t forge_symbol(forge_frame_t *ref, const char *s);
        status_t forge_ascii(forge_frame_t *ref, char c);
        status_t forge_rgba(forge_frame_t *ref, const uint32_t rgba);
        status_t forge_midi(forge_frame_t *ref, const midi::event_t *event);
        status_t forge_midi_raw(forge_frame_t *ref, const void *event, size_t bytes);
        status_t forge_bool(forge_frame_t *ref, bool value);
        status_t forge_null(forge_frame_t *ref);
        status_t forge_inf(forge_frame_t *ref);

        /**
         * Complete serialization of current frame
         * @param ref current frame descriptor
         * @return status of operation
         */
        status_t forge_end(forge_frame_t *ref);

        /**
         * Complete serialization of OSC packet
         * @param packet packet to store size and pointer to the data, for dynamic mode data should be freed
         *   by forge_free();
         * @param ref current frame descriptor
         * @return status of operation
         */
        status_t forge_close(packet_t *packet, forge_t *forge);

        /**
         * Destroy OSC serializer
         * @param forge serializer descriptor
         * @return status of operation
         */
        status_t forge_destroy(forge_t *forge);

        /**
         * Free mamory allocated by the OSC serializator
         * @param ptr ponter to memory
         * @return status of operation
         */
        void forge_free(void *ptr);
    }
}



#endif /* LSP_PLUG_IN_PROTOCOL_OSC_FORGE_H_ */