2 * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef _SQUID_SRC_HELPER_RESERVATIONID_H
10 #define _SQUID_SRC_HELPER_RESERVATIONID_H
16 /// a (temporary) lock on a (stateful) helper channel
20 static ReservationId
Next();
22 bool reserved() const { return id
> 0; }
24 explicit operator bool() const { return reserved(); }
25 bool operator !() const { return !reserved(); }
26 bool operator ==(const Helper::ReservationId
&other
) const { return id
== other
.id
; }
27 bool operator !=(const Helper::ReservationId
&other
) const { return !(*this == other
); }
29 void clear() { id
= 0; }
30 uint64_t value() const {return id
;}
32 /// dumps the reservation info for debugging
33 std::ostream
&print(std::ostream
&os
) const;
36 uint64_t id
= 0; ///< uniquely identifies this reservation
39 }; // namespace Helper
42 operator <<(std::ostream
&os
, const Helper::ReservationId
&id
)
48 /// default hash functor to support std::unordered_map<HelperReservationId, *>
50 struct hash
<Helper::ReservationId
>
52 typedef Helper::ReservationId argument_type
;
53 typedef std::size_t result_type
;
54 result_type
operator()(const argument_type
&reservation
) const noexcept
56 std::hash
<uint64_t> aHash
;
57 return aHash(reservation
.value());