Add hb_threadsafe_set_t
This commit is contained in:
parent
b45f32ee4e
commit
d37486d87b
|
@ -108,6 +108,60 @@ struct hb_static_mutex_t : hb_mutex_t
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
HB_END_DECLS
|
||||||
|
|
||||||
|
|
||||||
|
template <typename item_t>
|
||||||
|
struct hb_threadsafe_set_t
|
||||||
|
{
|
||||||
|
hb_set_t <item_t> set;
|
||||||
|
hb_static_mutex_t mutex;
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline item_t *insert (T v)
|
||||||
|
{
|
||||||
|
hb_mutex_lock (&mutex);
|
||||||
|
item_t *item = set.insert (v);
|
||||||
|
hb_mutex_unlock (&mutex);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline void remove (T v)
|
||||||
|
{
|
||||||
|
hb_mutex_lock (&mutex);
|
||||||
|
set.remove (v);
|
||||||
|
hb_mutex_unlock (&mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline item_t *find (T v)
|
||||||
|
{
|
||||||
|
hb_mutex_lock (&mutex);
|
||||||
|
item_t *item = set.find (v);
|
||||||
|
hb_mutex_unlock (&mutex);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline item_t *find_or_insert (T v) {
|
||||||
|
hb_mutex_lock (&mutex);
|
||||||
|
item_t *item = set.find_or_insert (v);
|
||||||
|
hb_mutex_unlock (&mutex);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
void finish (void) {
|
||||||
|
hb_mutex_lock (&mutex);
|
||||||
|
set.finish ();
|
||||||
|
hb_mutex_unlock (&mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
HB_BEGIN_DECLS
|
||||||
|
|
||||||
HB_END_DECLS
|
HB_END_DECLS
|
||||||
|
|
||||||
#endif /* HB_MUTEX_PRIVATE_HH */
|
#endif /* HB_MUTEX_PRIVATE_HH */
|
||||||
|
|
|
@ -324,8 +324,6 @@ struct hb_set_t
|
||||||
{
|
{
|
||||||
hb_array_t <item_t> items;
|
hb_array_t <item_t> items;
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline item_t *insert (T v)
|
inline item_t *insert (T v)
|
||||||
{
|
{
|
||||||
|
@ -370,6 +368,7 @@ struct hb_set_t
|
||||||
void finish (void) {
|
void finish (void) {
|
||||||
for (unsigned i = 0; i < items.len; i++)
|
for (unsigned i = 0; i < items.len; i++)
|
||||||
items[i].finish ();
|
items[i].finish ();
|
||||||
|
items.shrink (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue