#ifndef UPB_MESSAGE_MESSAGE_H_
#define UPB_MESSAGE_MESSAGE_H_
#include <stddef.h>
#include "upb/mem/arena.h"
#include "upb/message/internal/message.h"
#include "upb/message/internal/types.h"
#include "upb/mini_table/message.h"
#include "upb/port/def.inc"
typedef struct upb_Message upb_Message;
#ifdef __cplusplus
extern "C" {
#endif
UPB_API upb_Message* upb_Message_New(const upb_MiniTable* m, upb_Arena* arena);
const char* upb_Message_GetUnknown(const upb_Message* msg, size_t* len);
void upb_Message_DeleteUnknown(upb_Message* msg, const char* data, size_t len);
size_t upb_Message_ExtensionCount(const upb_Message* msg);
UPB_API void upb_Message_Freeze(upb_Message* msg, const upb_MiniTable* m);
UPB_API_INLINE bool upb_Message_IsFrozen(const upb_Message* msg);
#ifdef UPB_TRACING_ENABLED
UPB_INLINE void upb_Message_SetNewMessageTraceHandler(
void (*newMessageTraceHandler)(const upb_MiniTable* mini_table,
const upb_Arena* arena)) {
UPB_PRIVATE(upb_Message_SetNewMessageTraceHandler)(newMessageTraceHandler);
}
UPB_INLINE void upb_Message_LogNewMessage(const upb_MiniTable* mini_table,
const upb_Arena* arena) {
UPB_PRIVATE(upb_Message_LogNewMessage)(mini_table, arena);
}
#endif
#ifdef __cplusplus
}
#endif
#include "upb/port/undef.inc"
#endif