|
|
|
/* SPDX-License-Identifier: GPL-3.0-or-later */
|
|
|
|
/* Copyright 2022 Ivan Polyakov */
|
|
|
|
|
|
|
|
#ifndef RAPIDA_KEYVAL_HXX_ENTRY
|
|
|
|
#define RAPIDA_KEYVAL_HXX_ENTRY
|
|
|
|
|
|
|
|
#include "keyval.h"
|
|
|
|
|
|
|
|
namespace rpd {
|
|
|
|
/*!
|
|
|
|
* \brief C++ wrapper of the key-value pairs storage.
|
|
|
|
*/
|
|
|
|
class KeyVal {
|
|
|
|
public:
|
|
|
|
/*!
|
|
|
|
* \brief Default constructor.
|
|
|
|
*
|
|
|
|
* Create storage without initial allocation.
|
|
|
|
*/
|
|
|
|
KeyVal();
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Constructor.
|
|
|
|
*
|
|
|
|
* \param capacity Initial capacity of this storage.
|
|
|
|
*/
|
|
|
|
KeyVal(int capacity);
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Constructor
|
|
|
|
*
|
|
|
|
* \param keyval Base key-value storage (C implementation).
|
|
|
|
*/
|
|
|
|
KeyVal(rpd_keyval *keyval)
|
|
|
|
{
|
|
|
|
_keyval = keyval;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Is the storage unique?
|
|
|
|
*/
|
|
|
|
bool unique() const
|
|
|
|
{
|
|
|
|
return _keyval->unique;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Sets the uniqueness flag.
|
|
|
|
*
|
|
|
|
* \param is_unique Uniqueness flag.
|
|
|
|
*/
|
|
|
|
void unique(bool is_unique)
|
|
|
|
{
|
|
|
|
_keyval->unique = is_unique;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Returns real key-value storage.
|
|
|
|
*
|
|
|
|
* \return C key-value storage.
|
|
|
|
*/
|
|
|
|
rpd_keyval *keyval() const
|
|
|
|
{
|
|
|
|
return _keyval;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Get key-value pairs array.
|
|
|
|
*
|
|
|
|
* \return Key-value pairs.
|
|
|
|
*/
|
|
|
|
rpd_keyval_item *items() const
|
|
|
|
{
|
|
|
|
return _keyval->items;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Get number of key-value pairs in this storage.
|
|
|
|
*
|
|
|
|
* \return Number of entries.
|
|
|
|
*/
|
|
|
|
int size() const
|
|
|
|
{
|
|
|
|
return _keyval->size;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Get capacity of this storage (allocated memory);
|
|
|
|
*
|
|
|
|
* \return Allocated memory.
|
|
|
|
*/
|
|
|
|
int capacity() const
|
|
|
|
{
|
|
|
|
return _keyval->capacity;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Get value of key-value pair by it's key.
|
|
|
|
*
|
|
|
|
* \return Value or NULL.
|
|
|
|
*/
|
|
|
|
const char *operator[](const char *key)
|
|
|
|
{
|
|
|
|
return rpd_keyval_find(_keyval, key)->val;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* \brief Destructor.
|
|
|
|
*/
|
|
|
|
virtual ~KeyVal()
|
|
|
|
{
|
|
|
|
rpd_keyval_cleanup(_keyval);
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
rpd_keyval *_keyval; //< Composition with C implementation.
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // RAPIDA_KEYVAL_HXX_ENTRY
|