diff options
author | Andy Schwerin <schwerin@10gen.com> | 2013-05-23 16:36:33 -0400 |
---|---|---|
committer | Andy Schwerin <schwerin@10gen.com> | 2013-06-03 18:53:52 -0400 |
commit | 06c6c3b6fb835e1bcc62e5f725aca6d815cfb42e (patch) | |
tree | 29c9fd8e4f24683d8b6870b4625428d2512db9d3 /src/mongo/platform/process_id.h | |
parent | b3762aae9b2ee9dc2c9429d99432df65c94b7498 (diff) | |
download | mongo-06c6c3b6fb835e1bcc62e5f725aca6d815cfb42e.tar.gz |
SERVER-9809 Introduce mongo-wide ProcessId type.
Diffstat (limited to 'src/mongo/platform/process_id.h')
-rw-r--r-- | src/mongo/platform/process_id.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/src/mongo/platform/process_id.h b/src/mongo/platform/process_id.h new file mode 100644 index 00000000000..208b921a1c0 --- /dev/null +++ b/src/mongo/platform/process_id.h @@ -0,0 +1,106 @@ +/* Copyright 2013 10gen Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <iosfwd> + +#ifndef _WIN32 +#include <unistd.h> +#endif + +#include "mongo/platform/cstdint.h" +#include "mongo/platform/hash_namespace.h" + +namespace mongo { + +#ifdef _WIN32 + typedef DWORD NativeProcessId; +#else + typedef pid_t NativeProcessId; +#endif + + /** + * Platform-independent representation of a process identifier. + */ + class ProcessId { + public: + /** + * Gets the process id for the currently executing process. + */ + static ProcessId getCurrent(); + + /** + * Constructs a ProcessId from a NativeProcessId. + */ + static inline ProcessId fromNative(NativeProcessId npid) { return ProcessId(npid); } + + /** + * Constructs a ProcessId with an unspecified value. + */ + ProcessId() {} + + /** + * Gets the native process id corresponding to this ProcessId. + */ + NativeProcessId toNative() const { return _npid; } + + /** + * Represents this process id as a signed 64-bit integer. + * + * This representation will faithfully serialize and format to text files, but is at least + * twice the number of bits needed to uniquely represent valid process numbers on supported + * OSes.. + */ + int64_t asInt64() const; + + /** + * Similar to asInt64(), for compatibility with code that uses "long long" to mean 64-bit + * signed integer. + */ + long long asLongLong() const; + + /** + * Represents this process id as an unsigned 32-bit integer. + * + * This representation will contain all of the bits of the native process id, but may not + * serialize or format to text files meaningfully. + */ + uint32_t asUInt32() const { return static_cast<uint32_t>(_npid); } + + bool operator==(const ProcessId other) const { return _npid == other._npid; } + bool operator!=(const ProcessId other) const { return _npid != other._npid; } + bool operator<(const ProcessId other) const { return _npid < other._npid; } + bool operator<=(const ProcessId other) const { return _npid <= other._npid; } + bool operator>(const ProcessId other) const { return _npid > other._npid; } + bool operator>=(const ProcessId other) const { return _npid >= other._npid; } + + private: + explicit ProcessId(NativeProcessId npid): _npid(npid) {} + + NativeProcessId _npid; + }; + + std::ostream& operator<<(std::ostream& os, ProcessId pid); + +} // namespace mongo + +MONGO_HASH_NAMESPACE_START +template<> struct hash< ::mongo::ProcessId > { + size_t operator()(const ::mongo::ProcessId pid) const { + return hash< ::mongo::uint32_t >()(pid.asUInt32()); + } +}; +MONGO_HASH_NAMESPACE_END |