binmoji.h (935B)
1 2 #ifndef BINMOJI_H 3 #define BINMOJI_H 4 5 #include <stdint.h> 6 #include <stdlib.h> 7 8 struct binmoji { 9 uint32_t primary_codepoint; 10 uint32_t component_list[16]; 11 size_t component_count; 12 uint32_t component_hash; 13 uint8_t skin_tone1; 14 uint8_t skin_tone2; 15 uint8_t flags; 16 }; 17 18 static const uint64_t USER_FLAG_MASK = 1 << 3; 19 20 void binmoji_to_string(const struct binmoji *binmoji, char *out_str, size_t out_str_size); 21 void binmoji_decode(uint64_t id, struct binmoji *binmoji); 22 void binmoji_parse(const char *emoji, struct binmoji *binmoji); 23 uint64_t binmoji_encode(const struct binmoji *binmoji); 24 25 /* some user flag helpers */ 26 static __inline uint64_t binmoji_set_user_flag(uint64_t binmoji, uint8_t enable) { 27 return enable ? (binmoji | USER_FLAG_MASK) : (binmoji & ~USER_FLAG_MASK); 28 } 29 30 static __inline uint8_t binmoji_get_user_flag(uint64_t binmoji) { 31 return (binmoji & USER_FLAG_MASK) == USER_FLAG_MASK; 32 } 33 34 #endif /* BINMOJI_H */