diff options
Diffstat (limited to 'src/lib/util/pointer_util.h')
-rw-r--r-- | src/lib/util/pointer_util.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/lib/util/pointer_util.h b/src/lib/util/pointer_util.h new file mode 100644 index 0000000..a775584 --- /dev/null +++ b/src/lib/util/pointer_util.h @@ -0,0 +1,49 @@ +// Copyright (C) 2015 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef POINTER_UTIL_H +#define POINTER_UTIL_H + +namespace isc { +namespace util { + +/// @brief This function checks if two pointers are non-null and values +/// are equal. +/// +/// This function performs the typical comparison of values encapsulated by +/// the smart pointers, with checking if the pointers are non-null. +/// +/// @param ptr1 First pointer. +/// @param ptr2 Second pointer. +/// +/// @tparam T Pointer type, e.g. boost::shared_ptr, or boost::scoped_ptr. +/// +/// @return true only if both pointers are non-null and the values which they +/// point to are equal. +template<typename T> +inline bool equalValues(const T& ptr1, const T& ptr2) { + return (ptr1 && ptr2 && (*ptr1 == *ptr2)); +} + +/// @brief This function checks if two pointers are both null or both +/// are non-null and they point to equal values. +/// +/// @param ptr1 First pointer. +/// @param ptr2 Second pointer. +/// +/// @tparam T Pointer type, e.g. boost::shared_ptr, or boost::scoped_ptr. +/// +/// @return true if both pointers are null or if they are both non-null +/// and the values pointed to are equal. +template<typename T> +inline bool nullOrEqualValues(const T& ptr1, const T& ptr2) { + return ((!ptr1 && !ptr2) || equalValues(ptr1, ptr2)); +} + +} // end of namespace isc::util +} // end of namespace isc + +#endif |