Erlang: ei_get_type (): where are the given constants for the type field?

I try to use ei_get_type () ( ei ), but I had trouble finding where the type field is documented. I looked in ei.h , but all I could find was a list of constants starting with "ERL _".

#define ERL_SMALL_INTEGER_EXT 'a' #define ERL_INTEGER_EXT 'b' #define ERL_FLOAT_EXT 'c' #define ERL_ATOM_EXT 'd' #define ERL_REFERENCE_EXT 'e' #define ERL_NEW_REFERENCE_EXT 'r' #define ERL_PORT_EXT 'f' #define ERL_PID_EXT 'g' #define ERL_SMALL_TUPLE_EXT 'h' #define ERL_LARGE_TUPLE_EXT 'i' #define ERL_NIL_EXT 'j' #define ERL_STRING_EXT 'k' #define ERL_LIST_EXT 'l' #define ERL_BINARY_EXT 'm' #define ERL_SMALL_BIG_EXT 'n' #define ERL_LARGE_BIG_EXT 'o' #define ERL_NEW_FUN_EXT 'p' #define ERL_FUN_EXT 'u' 

Is this the correct list? I'm not sure, because the prototype er_get_type () has * int ** for the type field, whereas the ei.h file defines char for the constants above.

NOTE. The erl_interface package uses other "constants" that are not listed here.

+4
source share
2 answers

According to the rest of the c codes in Erlang (odbcserver.c, show_msg.c) this is what you should compare with this value.

Apparently, these are byte values ​​used by the external binary format to indicate element types, and the get8 macro in putget.h simply returns that value.

+2
source

I used ei to encode / decode erlang terms from cnode after a couple of months, and the constants you mention look normal. I use:

LONG β†’ a

ATOM β†’ d

TUPLE β†’ h

EMPTY_LIST β†’ j

STRING β†’ k

LIST β†’ l

BINARY β†’ m

in the form of messages that I have to parse, I only get these types.

0
source

All Articles