@ -39,20 +39,21 @@
extern " C " {
# endif
/* Creates a new map on the given arena with the given key/value size. */
upb_Map * upb_Map_New ( upb_Arena * a , upb_CType key_type , upb_CType value_type ) ;
// Creates a new map on the given arena with the given key/value size.
UPB_API upb_Map * upb_Map_New ( upb_Arena * a , upb_CType key_type ,
upb_CType value_type ) ;
/* Returns the number of entries in the map. */
size_t upb_Map_Size ( const upb_Map * map ) ;
// Returns the number of entries in the map.
UPB_API size_t upb_Map_Size ( const upb_Map * map ) ;
/* Stores a value for the given key into |*val| (or the zero value if the key is
* not present ) . Returns whether the key was present . The | val | pointer may be
* NULL , in which case the function tests whether the given key is present . */
bool upb_Map_Get ( const upb_Map * map , upb_MessageValue key ,
upb_MessageValue * val ) ;
// Stores a value for the given key into |*val| (or the zero value if the key is
// not present). Returns whether the key was present. The |val| pointer may be
// NULL, in which case the function tests whether the given key is present.
UPB_API bool upb_Map_Get ( const upb_Map * map , upb_MessageValue key ,
upb_MessageValue * val ) ;
/* Removes all entries in the map. */
void upb_Map_Clear ( upb_Map * map ) ;
// Removes all entries in the map.
UPB_API void upb_Map_Clear ( upb_Map * map ) ;
typedef enum {
kUpb_MapInsertStatus_Inserted = 0 ,
@ -60,29 +61,31 @@ typedef enum {
kUpb_MapInsertStatus_OutOfMemory = 2 ,
} upb_MapInsertStatus ;
/* Sets the given key to the given value, returning whether the key was inserted
* or replaced . If the key was inserted , then any existing iterators will be
* invalidated . */
upb_MapInsertStatus upb_Map_Insert ( upb_Map * map , upb_MessageValue key ,
upb_MessageValue val , upb_Arena * arena ) ;
/* Sets the given key to the given value. Returns false if memory allocation
* failed . If the key is newly inserted , then any existing iterators will be
* invalidated . */
UPB_INLINE bool upb_Map_Set ( upb_Map * map , upb_MessageValue key ,
upb_MessageValue val , upb_Arena * arena ) {
// Sets the given key to the given value, returning whether the key was inserted
// or replaced. If the key was inserted, then any existing iterators will be
// invalidated.
UPB_API upb_MapInsertStatus upb_Map_Insert ( upb_Map * map , upb_MessageValue key ,
upb_MessageValue val ,
upb_Arena * arena ) ;
// Sets the given key to the given value. Returns false if memory allocation
// failed. If the key is newly inserted, then any existing iterators will be
// invalidated.
UPB_API_INLINE bool upb_Map_Set ( upb_Map * map , upb_MessageValue key ,
upb_MessageValue val , upb_Arena * arena ) {
return upb_Map_Insert ( map , key , val , arena ) ! =
kUpb_MapInsertStatus_OutOfMemory ;
}
// Deletes this key from the table. Returns true if the key was present.
// If present and |val| is non-NULL, stores the deleted value.
bool upb_Map_Delete2 ( upb_Map * map , upb_MessageValue key , upb_MessageValue * val ) ;
UPB_API bool upb_Map_Delete ( upb_Map * map , upb_MessageValue key ,
upb_MessageValue * val ) ;
// Deletes this key from the table. Returns true if the key was present.
// (DEPRECATED and going away soon. Do not use.)
UPB_INLINE bool upb_Map_Delete ( upb_Map * map , upb_MessageValue key ) {
return upb_Map_Delete2 ( map , key , NULL ) ;
UPB_INLINE bool upb_Map_Delete2 ( upb_Map * map , upb_MessageValue key ,
upb_MessageValue * val ) {
return upb_Map_Delete ( map , key , val ) ;
}
// Map iteration:
@ -97,8 +100,8 @@ UPB_INLINE bool upb_Map_Delete(upb_Map* map, upb_MessageValue key) {
// Advances to the next entry. Returns false if no more entries are present.
// Otherwise returns true and populates both *key and *value.
bool upb_Map_Next ( const upb_Map * map , upb_MessageValue * key ,
upb_MessageValue * val , size_t * iter ) ;
UPB_API bool upb_Map_Next ( const upb_Map * map , upb_MessageValue * key ,
upb_MessageValue * val , size_t * iter ) ;
// DEPRECATED iterator, slated for removal.
@ -114,12 +117,12 @@ bool upb_Map_Next(const upb_Map* map, upb_MessageValue* key,
// Advances to the next entry. Returns false if no more entries are present.
bool upb_MapIterator_Next ( const upb_Map * map , size_t * iter ) ;
/* Returns true if the iterator still points to a valid entry, or false if the
* iterator is past the last element . It is an error to call this function with
* kUpb_Map_Begin ( you must call next ( ) at least once first ) . */
// Returns true if the iterator still points to a valid entry, or false if the
// iterator is past the last element. It is an error to call this function with
// kUpb_Map_Begin (you must call next() at least once first).
bool upb_MapIterator_Done ( const upb_Map * map , size_t iter ) ;
/* Returns the key and value for this entry of the map. */
// Returns the key and value for this entry of the map.
upb_MessageValue upb_MapIterator_Key ( const upb_Map * map , size_t iter ) ;
upb_MessageValue upb_MapIterator_Value ( const upb_Map * map , size_t iter ) ;