##// END OF EJS Templates
internals: extract frame-based protocol docs to own document...
internals: extract frame-based protocol docs to own document wireprotocol.txt is quite long and difficult to digest. The frame-based protocol is effectively a standalone concept (and could even be used outside of Mercurial). So this commit extracts its docs to a standalone file. The first few paragraphs were rewritten as part of the extraction. Sections headers were adjusted accordingly. Existing referalls in wireprotocol.txt were updated to refer to the new doc / concept, which I've started referring to as `hgrpc`. I'm on the fence as to whether to move the HTTP and SSH transport details to the new doc as well. For now, I'm leaving them in wireprotocol.txt. Differential Revision: https://phab.mercurial-scm.org/D4443

File last commit:

r38322:1fb2510c @40 default
r39594:b0e0db15 default
Show More
bitmanipulation.h
51 lines | 989 B | text/x-c | CLexer
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 #ifndef _HG_BITMANIPULATION_H_
#define _HG_BITMANIPULATION_H_
Martin von Zweigbergk
bitmanipulation: add missing include of string.h...
r32646 #include <string.h>
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 #include "compat.h"
static inline uint32_t getbe32(const char *c)
{
const unsigned char *d = (const unsigned char *)c;
Augie Fackler
bitmanipulation: fix undefined behavior in bit shift in getbe32...
r38322 return ((((uint32_t)d[0]) << 24) | (((uint32_t)d[1]) << 16) |
(((uint32_t)d[2]) << 8) | (d[3]));
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 }
static inline int16_t getbeint16(const char *c)
{
const unsigned char *d = (const unsigned char *)c;
Augie Fackler
bitmanipulation: reformat with clang-format...
r34698 return ((d[0] << 8) | (d[1]));
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 }
static inline uint16_t getbeuint16(const char *c)
{
const unsigned char *d = (const unsigned char *)c;
Augie Fackler
bitmanipulation: reformat with clang-format...
r34698 return ((d[0] << 8) | (d[1]));
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 }
static inline void putbe32(uint32_t x, char *c)
{
c[0] = (x >> 24) & 0xff;
c[1] = (x >> 16) & 0xff;
c[2] = (x >> 8) & 0xff;
Augie Fackler
bitmanipulation: reformat with clang-format...
r34698 c[3] = (x)&0xff;
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 }
static inline double getbefloat64(const char *c)
{
const unsigned char *d = (const unsigned char *)c;
double ret;
int i;
uint64_t t = 0;
for (i = 0; i < 8; i++) {
Augie Fackler
bitmanipulation: reformat with clang-format...
r34698 t = (t << 8) + d[i];
Maciej Fijalkowski
internals: move the bitmanipulation routines into its own file...
r29444 }
memcpy(&ret, &t, sizeof(t));
return ret;
}
#endif