mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
binpac: Adding int64 and uint64 types to binpac.
This commit is contained in:
parent
50f5a913c3
commit
1d6cea8c52
5 changed files with 43 additions and 7 deletions
|
@ -35,9 +35,11 @@ const int unspecified_byteorder = -1;
|
|||
typedef char int8;
|
||||
typedef short int16;
|
||||
typedef long int32;
|
||||
typedef long long int64;
|
||||
typedef unsigned char uint8;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned int uint32;
|
||||
typedef unsigned long long uint64;
|
||||
typedef void *nullptr;
|
||||
typedef void *voidptr;
|
||||
typedef uint8 *byteptr;
|
||||
|
@ -80,6 +82,31 @@ inline uint32 pac_swap(uint32 x)
|
|||
((x & 0xff) << 24);
|
||||
}
|
||||
|
||||
inline int64 pac_swap(int64 x)
|
||||
{
|
||||
return (x >> 56) |
|
||||
((x & 0xff000000000000) >> 40) |
|
||||
((x & 0xff0000000000) >> 24) |
|
||||
((x & 0xff00000000) >> 8) |
|
||||
((x & 0xff000000) << 8) |
|
||||
((x & 0xff0000) << 24) |
|
||||
((x & 0xff00) << 40) |
|
||||
((x & 0xff) << 56);
|
||||
}
|
||||
|
||||
inline uint64 pac_swap(uint64 x)
|
||||
{
|
||||
return (x >> 56) |
|
||||
((x & 0xff000000000000) >> 40) |
|
||||
((x & 0xff0000000000) >> 24) |
|
||||
((x & 0xff00000000) >> 8) |
|
||||
((x & 0xff000000) << 8) |
|
||||
((x & 0xff0000) << 24) |
|
||||
((x & 0xff00) << 40) |
|
||||
((x & 0xff) << 56);
|
||||
}
|
||||
|
||||
|
||||
#define FixByteOrder(byteorder, x) (byteorder == HOST_BYTEORDER ? (x) : pac_swap(x))
|
||||
|
||||
template <class T>
|
||||
|
|
|
@ -11,8 +11,8 @@ Type *BuiltInType::DoClone() const
|
|||
bool BuiltInType::IsNumericType() const
|
||||
{
|
||||
BITType t = bit_type();
|
||||
return (t == INT8 || t == INT16 || t == INT32 ||
|
||||
t == UINT8 || t == UINT16 || t == UINT32);
|
||||
return (t == INT8 || t == INT16 || t == INT32 || t == INT64 ||
|
||||
t == UINT8 || t == UINT16 || t == UINT32 || t == UINT64);
|
||||
}
|
||||
|
||||
bool BuiltInType::CompatibleBuiltInTypes(BuiltInType *type1,
|
||||
|
@ -125,6 +125,8 @@ void BuiltInType::DoGenParseCode(Output* out_cc, Env* env,
|
|||
case UINT16:
|
||||
case INT32:
|
||||
case UINT32:
|
||||
case INT64:
|
||||
case UINT64:
|
||||
#if 0
|
||||
out_cc->println("%s = UnMarshall<%s>(%s, %s);",
|
||||
lvalue(),
|
||||
|
|
|
@ -68,9 +68,13 @@ void insert_basictype_defs(Output* out)
|
|||
out->println("typedef char int8;");
|
||||
out->println("typedef short int16;");
|
||||
out->println("typedef long int32;");
|
||||
out->println("typedef long long int64;");
|
||||
|
||||
out->println("typedef unsigned char uint8;");
|
||||
out->println("typedef unsigned short uint16;");
|
||||
out->println("typedef unsigned long uint32;");
|
||||
out->println("typedef unsigned long long uint64;");
|
||||
|
||||
out->println("");
|
||||
out->println("#endif /* pac_type_defs */");
|
||||
out->println("");
|
||||
|
@ -80,6 +84,7 @@ void insert_byteorder_macros(Output* out)
|
|||
{
|
||||
out->println("#define FixByteOrder16(x) (byteorder == HOST_BYTEORDER ? (x) : pac_swap16(x))");
|
||||
out->println("#define FixByteOrder32(x) (byteorder == HOST_BYTEORDER ? (x) : pac_swap32(x))");
|
||||
out->println("#define FixByteOrder64(x) (byteorder == HOST_BYTEORDER ? (x) : pac_swap64(x))");
|
||||
out->println("");
|
||||
}
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
%token TOK_RIGHTARROW TOK_DEFAULT TOK_OF
|
||||
%token TOK_PADDING TOK_TO TOK_ALIGN
|
||||
%token TOK_WITHINPUT
|
||||
%token TOK_INT8 TOK_INT16 TOK_INT32
|
||||
%token TOK_UINT8 TOK_UINT16 TOK_UINT32
|
||||
%token TOK_INT8 TOK_INT16 TOK_INT32 TOK_INT64
|
||||
%token TOK_UINT8 TOK_UINT16 TOK_UINT32 TOK_UINT64
|
||||
%token TOK_ID TOK_NUMBER TOK_REGEX TOK_STRING
|
||||
%token TOK_BEGIN_RE TOK_END_RE
|
||||
%token TOK_ATTR_ALSO
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
TYPE_DEF(INT8, "int8", "int8", 1)
|
||||
TYPE_DEF(INT16, "int16", "int16", 2)
|
||||
TYPE_DEF(INT32, "int32", "int32", 4)
|
||||
TYPE_DEF(INT64, "int64", "int64", 8)
|
||||
TYPE_DEF(UINT8, "uint8", "uint8", 1)
|
||||
TYPE_DEF(UINT16, "uint16", "uint16", 2)
|
||||
TYPE_DEF(UINT32, "uint32", "uint32", 4)
|
||||
TYPE_DEF(UINT64, "uint64", "uint64", 8)
|
||||
TYPE_DEF(EMPTY, "empty", "", 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue