Skip to content

Serialização wire

Helpers de baixo nível usados por wire::Protocol para montar mensagens de saída.


Acrescenta um token em out, adicionando aspas e escapes quando tokenNeedsQuotes for true.

bool appendWireToken(char* out, size_t outCap, size_t& pos, const char* s)
char buf[128];
size_t pos = 0;
wire::appendWireToken(buf, sizeof(buf), pos, "hello world");
// buf == "\"hello world\""

O(|s|).


Acrescenta uma vírgula ao buffer wire em construção.

bool appendComma(char* buf, size_t cap, size_t& pos)

O(1).


Serializa um body de lista nome(b,role,idx,...); em buf.

bool appendListBody(char* buf, size_t cap, size_t& pos,
const char* cmdName, char listMode, char listRole,
int idx, const std::vector<const char*>& fields)
char buf[256];
size_t pos = 0;
wire::appendListBody(buf, sizeof(buf), pos, "param_list", 'b', 's', 0,
{"param_a", "42"});
// buf == "param_list(b,s,0,param_a,42);"

O(comprimento total dos campos).


Serializa um header de lista nome(h,role,T,C,B,j); em buf.

bool appendListHeader(char* buf, size_t cap, size_t& pos,
const char* cmdName, char role,
int T, int C, int B, int j)
char buf[128];
size_t pos = 0;
wire::appendListHeader(buf, sizeof(buf), pos, "param_list", 's',
5, 2, 1, 0);
// buf == "param_list(h,s,5,2,1,0);"

O(1) (snprintf pequeno e fixo).


Retorna o comprimento em bytes de um header de lista serializado (sem terminador nulo). Usado ao empacotar bodies sob kPackBudget.

size_t listHeaderWireBytes(const char* cmdName, char role,
int T, int C, int B, int j)

O(1).