132#ifdef PROVSQL_INPROCESS_STORE
141bool provsql_inproc_send(
const char *buf,
size_t len);
148extern size_t buffercap;
150void provsql_buffer_ensure(
size_t need);
152#define READM(var, type) provsql_fifo_pop (&provsql_shared_state->req, &(var), sizeof(type))
153#define READB(var, type) provsql_fifo_pop (&provsql_shared_state->resp, &(var), sizeof(type))
154#define WRITEB(pvar, type) provsql_fifo_push(&provsql_shared_state->resp, (pvar), sizeof(type))
155#define WRITEM(pvar, type) provsql_fifo_push(&provsql_shared_state->req, (pvar), sizeof(type))
157#define READB_BYTES(ptr, n) provsql_fifo_pop (&provsql_shared_state->resp, (ptr), (n))
158#define READM_BYTES(ptr, n) provsql_fifo_pop (&provsql_shared_state->req, (ptr), (n))
159#define WRITEB_BYTES(ptr, n) provsql_fifo_push(&provsql_shared_state->resp, (ptr), (n))
161#define STARTWRITEM() (bufferpos=0)
162#define ADDWRITEM(pvar, type) (provsql_buffer_ensure(bufferpos+sizeof(type)), memcpy(buffer+bufferpos, pvar, sizeof(type)), bufferpos+=sizeof(type))
163#define SENDWRITEM() provsql_inproc_send(buffer, bufferpos)
171extern char buffer[PIPE_BUF];
176#define READM(var, type) (read(provsql_shared_state->pipebmr, &var, sizeof(type))==(ssize_t)sizeof(type))
178#define READB(var, type) (read(provsql_shared_state->pipembr, &var, sizeof(type))==(ssize_t)sizeof(type))
180#define WRITEB(pvar, type) (write(provsql_shared_state->pipembw, pvar, sizeof(type))!=-1)
182#define WRITEM(pvar, type) (write(provsql_shared_state->pipebmw, pvar, sizeof(type))!=-1)
185#define READB_BYTES(ptr, n) provsql_read_all(provsql_shared_state->pipembr, (ptr), (n))
187#define READM_BYTES(ptr, n) provsql_read_all(provsql_shared_state->pipebmr, (ptr), (n))
189#define WRITEB_BYTES(ptr, n) (write(provsql_shared_state->pipembw, (ptr), (n))!=-1)
192#define STARTWRITEM() (bufferpos=0)
194#define ADDWRITEM(pvar, type) (memcpy(buffer+bufferpos, pvar, sizeof(type)), bufferpos+=sizeof(type))
196#define SENDWRITEM() (write(provsql_shared_state->pipebmw, buffer, bufferpos)!=-1)
Build-configuration switches shared across the C and C++ sources.
char buffer[PIPE_BUF]
Shared write buffer used with STARTWRITEM / ADDWRITEM / SENDWRITEM.
unsigned bufferpos
Current write position within buffer.
void provsql_internal_set_extra(const pg_uuid_t *token, const char *str)
Set a gate's extra string from in-extension C/C++ code.
void initialize_provsql_mmap(void)
Open (or create) the mmap files and initialise the circuit store.
void provsql_internal_create_gate(const pg_uuid_t *token, gate_type type, unsigned nb_children, const pg_uuid_t *children_data)
Create a gate from in-extension C/C++ code (cache + worker IPC).
void provsql_mmap_worker(Datum)
Entry point for the ProvSQL mmap background worker.
bool provsql_read_all(int fd, void *dst, size_t n)
Read exactly n bytes from fd into dst; false on EOF/error.
void provsql_mmap_dispatch(char c, Oid db_oid)
Handle a single IPC message: read its payload and write its reply.
void destroy_provsql_mmap(void)
Unmap and close the mmap files.
bool provsql_internal_set_prob(const pg_uuid_t *token, double prob)
Set an input gate's probability from in-extension C/C++ code.
void provsql_mmap_main_loop(void)
Main processing loop of the mmap background worker.
void provsql_internal_set_infos(const pg_uuid_t *token, unsigned info1, unsigned info2)
Set a gate's info fields from in-extension C/C++ code.
void RegisterProvSQLMMapWorker(void)
Register the ProvSQL mmap background worker with PostgreSQL.
Core types, constants, and utilities shared across ProvSQL.