/*
- * $Id$
+ * Copyright (C) 1996-2020 The Squid Software Foundation and contributors
*
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
*/
#ifndef SQUID_IPC_MEM_PAGE_H
#define SQUID_IPC_MEM_PAGE_H
-#if HAVE_IOSFWD
+#include "ipc/mem/forward.h"
+
#include <iosfwd>
-#endif
-namespace Ipc {
+namespace Ipc
+{
-namespace Mem {
+namespace Mem
+{
/// Shared memory page identifier, address, or handler
-class PageId {
+class PageId
+{
public:
PageId(): pool(0), number(0), purpose(maxPurpose) {}
- operator bool() const { return pool && number; }
+ /// true if and only if both critical components have been initialized
+ bool set() const { return pool && number; }
+
+ // safer than bool which would enable silent casts to int
+ typedef const uint32_t PageId::*SaferBool;
+ operator SaferBool() const { return set() ? &PageId::number : NULL; }
+
+ /// The ID of a PagePool (and/or PageStack) this page belongs to.
+ /// Positive values are (ab)used to detect in-use pages. See set().
+ /// Eventually, they may identify a PageStack in a multi-segment PagePool.
+ /// These IDs also distinguish page pools/stacks in debugging logs.
+ PoolId pool;
- uint32_t pool; ///< page pool ID within Squid
// uint32_t segment; ///< memory segment ID within the pool; unused for now
uint32_t number; ///< page number within the segment
} // namespace Ipc
#endif // SQUID_IPC_MEM_PAGE_H
+