summaryrefslogtreecommitdiff
path: root/pjlib/include/pj++/hash.hpp
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2005-11-09 15:37:19 +0000
committerBenny Prijono <bennylp@teluu.com>2005-11-09 15:37:19 +0000
commit6e1024262b48b57b771331b8c19e988e43627bd7 (patch)
treea43fdaeb6d7b22cc7afab1633622bf55d39dfd67 /pjlib/include/pj++/hash.hpp
parentfb9e3b3a6649cc5cbe0c6747cb1918f3be71ba06 (diff)
Rework pjlib++
git-svn-id: http://svn.pjsip.org/repos/pjproject/main@36 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/include/pj++/hash.hpp')
-rw-r--r--pjlib/include/pj++/hash.hpp110
1 files changed, 88 insertions, 22 deletions
diff --git a/pjlib/include/pj++/hash.hpp b/pjlib/include/pj++/hash.hpp
index 26f48010..6d4a5e68 100644
--- a/pjlib/include/pj++/hash.hpp
+++ b/pjlib/include/pj++/hash.hpp
@@ -1,73 +1,139 @@
/* $Id$
- *
*/
#ifndef __PJPP_HASH_H__
#define __PJPP_HASH_H__
#include <pj++/types.hpp>
+#include <pj++/pool.hpp>
#include <pj/hash.h>
-class PJ_Hash_Table
+//
+// Hash table.
+//
+class Pj_Hash_Table : public Pj_Object
{
public:
+ //
+ // Hash table iterator.
+ //
class iterator
{
public:
- iterator() {}
- explicit iterator(pj_hash_table_t *h, pj_hash_iterator_t *i) : ht_(h), it_(i) {}
- iterator(const iterator &rhs) : ht_(rhs.ht_), it_(rhs.it_) {}
- void operator++() { it_ = pj_hash_next(ht_, it_); }
- bool operator==(const iterator &rhs) { return ht_ == rhs.ht_ && it_ == rhs.it_; }
- iterator & operator=(const iterator &rhs) { ht_=rhs.ht_; it_=rhs.it_; return *this; }
+ iterator()
+ {
+ }
+ explicit iterator(pj_hash_table_t *h, pj_hash_iterator_t *i)
+ : ht_(h), it_(i)
+ {
+ }
+ iterator(const iterator &rhs)
+ : ht_(rhs.ht_), it_(rhs.it_)
+ {
+ }
+ void operator++()
+ {
+ it_ = pj_hash_next(ht_, it_);
+ }
+ bool operator==(const iterator &rhs)
+ {
+ return ht_ == rhs.ht_ && it_ == rhs.it_;
+ }
+ iterator & operator=(const iterator &rhs)
+ {
+ ht_=rhs.ht_; it_=rhs.it_;
+ return *this;
+ }
private:
pj_hash_table_t *ht_;
pj_hash_iterator_t it_val_;
pj_hash_iterator_t *it_;
- friend class PJ_Hash_Table;
+ friend class Pj_Hash_Table;
};
- static PJ_Hash_Table *create(PJ_Pool *pool, unsigned size)
+ //
+ // Construct hash table.
+ //
+ Pj_Hash_Table(Pj_Pool *pool, unsigned size)
{
- return (PJ_Hash_Table*) pj_hash_create(pool->pool_(), size);
+ table_ = pj_hash_create(pool->pool_(), size);
}
- static pj_uint32_t calc(pj_uint32_t initial_hval, const void *key, unsigned keylen)
+ //
+ // Destroy hash table.
+ //
+ ~Pj_Hash_Table()
+ {
+ }
+
+ //
+ // Calculate hash value.
+ //
+ static pj_uint32_t calc( pj_uint32_t initial_hval,
+ const void *key,
+ unsigned keylen = PJ_HASH_KEY_STRING)
{
return pj_hash_calc(initial_hval, key, keylen);
}
- pj_hash_table_t *hash_table_()
+ //
+ // Return pjlib compatible hash table object.
+ //
+ pj_hash_table_t *pj_hash_table_t_()
{
- return (pj_hash_table_t*)this;
+ return table_;
}
- void *get(const void *key, unsigned keylen)
+ //
+ // Get the value associated with the specified key.
+ //
+ void *get(const void *key, unsigned keylen = PJ_HASH_KEY_STRING)
{
- return pj_hash_get(this->hash_table_(), key, keylen);
+ return pj_hash_get(table_, key, keylen);
}
- void set(PJ_Pool *pool, const void *key, unsigned keylen, void *value)
+ //
+ // Associate a value with a key.
+ // Set the value to NULL to delete the key from the hash table.
+ //
+ void set(Pj_Pool *pool,
+ const void *key,
+ void *value,
+ unsigned keylen = PJ_HASH_KEY_STRING)
{
- pj_hash_set(pool->pool_(), this->hash_table_(), key, keylen, value);
+ pj_hash_set(pool->pool_(), table_, key, keylen, value);
}
+ //
+ // Get number of items in the hash table.
+ //
unsigned count()
{
- return pj_hash_count(this->hash_table_());
+ return pj_hash_count(table_);
}
+ //
+ // Iterate hash table.
+ //
iterator begin()
{
- iterator it(this->hash_table_(), NULL);
- it.it_ = pj_hash_first(this->hash_table_(), &it.it_val_);
+ iterator it(table_, NULL);
+ it.it_ = pj_hash_first(table_, &it.it_val_);
return it;
}
+ //
+ // End of items.
+ //
iterator end()
{
- return iterator(this->hash_table_(), NULL);
+ return iterator(table_, NULL);
}
+
+private:
+ pj_hash_table_t *table_;
};
+
#endif /* __PJPP_HASH_H__ */
+