diff options
author | David Foerster <david.foerster@informatik.hu-berlin.de> | 2016-05-10 20:20:14 +0200 |
---|---|---|
committer | David Foerster <david.foerster@informatik.hu-berlin.de> | 2016-05-10 20:20:14 +0200 |
commit | fc37cc4a02ed13d1a73b941a9f80975600fd1b99 (patch) | |
tree | ad9e5ac81111402b5c47dc06944cc5243824c4b5 /src/Platform/SharedPtr.h | |
parent | 98b04198c6ea5bc07cca50956809068adf1fea82 (diff) | |
download | VeraCrypt-fc37cc4a02ed13d1a73b941a9f80975600fd1b99.tar.gz VeraCrypt-fc37cc4a02ed13d1a73b941a9f80975600fd1b99.zip |
Normalize all line terminators
Diffstat (limited to 'src/Platform/SharedPtr.h')
-rw-r--r-- | src/Platform/SharedPtr.h | 312 |
1 files changed, 156 insertions, 156 deletions
diff --git a/src/Platform/SharedPtr.h b/src/Platform/SharedPtr.h index 0bc7bdcf..ce49469b 100644 --- a/src/Platform/SharedPtr.h +++ b/src/Platform/SharedPtr.h @@ -8,159 +8,159 @@ and are governed by the Apache License 2.0 the full text of which is contained in the file License.txt included in VeraCrypt binary and source code distribution packages. -*/
-
-#ifndef TC_HEADER_Platform_SharedPtr
-#define TC_HEADER_Platform_SharedPtr
-
-#include <stdexcept>
-#include "SharedVal.h"
-
-#ifdef nullptr
-
-namespace VeraCrypt
-{
- template <class T>
- class SharedPtr
- {
- public:
- explicit SharedPtr ()
- : Pointer (nullptr), UseCount (nullptr) { }
-
- explicit SharedPtr (T *pointer)
- : Pointer (pointer), UseCount (new SharedVal <uint64> (1)) { }
-
- SharedPtr (const SharedPtr &source)
- {
- CopyFrom (source);
- }
-
- ~SharedPtr ()
- {
- Release();
- }
-
- SharedPtr &operator= (const SharedPtr &source)
- {
- if (&source == this)
- return *this;
-
- Release();
- CopyFrom (source);
- return *this;
- }
-
- bool operator == (const SharedPtr &other)
- {
- return get() == other.get();
- }
-
- bool operator != (const SharedPtr &other)
- {
- return get() != other.get();
- }
-
- T &operator* () const
- {
-#ifdef DEBUG
- if (Pointer == nullptr)
- throw std::runtime_error (SRC_POS);
-#endif
- return *Pointer;
- }
-
- T *operator-> () const
- {
-#ifdef DEBUG
- if (Pointer == nullptr)
- throw std::runtime_error (SRC_POS);
-#endif
- return Pointer;
- }
-
- operator bool () const
- {
- return Pointer != nullptr;
- }
-
- T *get () const
- {
- return Pointer;
- }
-
- void reset ()
- {
- Release();
- }
-
- void reset (T *pointer)
- {
- *this = SharedPtr (pointer);
- }
-
- uint64 use_count () const
- {
- if (!UseCount)
- return 0;
-
- return *UseCount;
- }
-
- protected:
- void CopyFrom (const SharedPtr &source)
- {
- Pointer = source.Pointer;
- UseCount = source.UseCount;
-
- if (UseCount)
- UseCount->Increment();
- }
-
- void Release ()
- {
- if (UseCount != nullptr)
- {
- if (UseCount->Decrement() == 0)
- {
- if (Pointer != nullptr)
- delete Pointer;
- delete UseCount;
- }
-
- Pointer = nullptr;
- UseCount = nullptr;
- }
- }
-
- T *Pointer;
- SharedVal <uint64> *UseCount;
- };
-
-#ifdef shared_ptr
-#undef shared_ptr
-#endif
-#define shared_ptr VeraCrypt::SharedPtr
-
-#ifdef make_shared
-#undef make_shared
-#endif
-
- template <class T> shared_ptr <T> make_shared ()
- {
- return shared_ptr <T> (new T ());
- }
-
- template <class T, class A> shared_ptr <T> make_shared (const A &arg)
- {
- return shared_ptr <T> (new T (arg));
- }
-
-#define make_shared VeraCrypt::make_shared
-
-}
-
-#endif // nullptr
-
-#define make_shared_auto(typeName,instanceName) shared_ptr <typeName> instanceName (new typeName ())
-
-#endif // TC_HEADER_Platform_SharedPtr
+*/ + +#ifndef TC_HEADER_Platform_SharedPtr +#define TC_HEADER_Platform_SharedPtr + +#include <stdexcept> +#include "SharedVal.h" + +#ifdef nullptr + +namespace VeraCrypt +{ + template <class T> + class SharedPtr + { + public: + explicit SharedPtr () + : Pointer (nullptr), UseCount (nullptr) { } + + explicit SharedPtr (T *pointer) + : Pointer (pointer), UseCount (new SharedVal <uint64> (1)) { } + + SharedPtr (const SharedPtr &source) + { + CopyFrom (source); + } + + ~SharedPtr () + { + Release(); + } + + SharedPtr &operator= (const SharedPtr &source) + { + if (&source == this) + return *this; + + Release(); + CopyFrom (source); + return *this; + } + + bool operator == (const SharedPtr &other) + { + return get() == other.get(); + } + + bool operator != (const SharedPtr &other) + { + return get() != other.get(); + } + + T &operator* () const + { +#ifdef DEBUG + if (Pointer == nullptr) + throw std::runtime_error (SRC_POS); +#endif + return *Pointer; + } + + T *operator-> () const + { +#ifdef DEBUG + if (Pointer == nullptr) + throw std::runtime_error (SRC_POS); +#endif + return Pointer; + } + + operator bool () const + { + return Pointer != nullptr; + } + + T *get () const + { + return Pointer; + } + + void reset () + { + Release(); + } + + void reset (T *pointer) + { + *this = SharedPtr (pointer); + } + + uint64 use_count () const + { + if (!UseCount) + return 0; + + return *UseCount; + } + + protected: + void CopyFrom (const SharedPtr &source) + { + Pointer = source.Pointer; + UseCount = source.UseCount; + + if (UseCount) + UseCount->Increment(); + } + + void Release () + { + if (UseCount != nullptr) + { + if (UseCount->Decrement() == 0) + { + if (Pointer != nullptr) + delete Pointer; + delete UseCount; + } + + Pointer = nullptr; + UseCount = nullptr; + } + } + + T *Pointer; + SharedVal <uint64> *UseCount; + }; + +#ifdef shared_ptr +#undef shared_ptr +#endif +#define shared_ptr VeraCrypt::SharedPtr + +#ifdef make_shared +#undef make_shared +#endif + + template <class T> shared_ptr <T> make_shared () + { + return shared_ptr <T> (new T ()); + } + + template <class T, class A> shared_ptr <T> make_shared (const A &arg) + { + return shared_ptr <T> (new T (arg)); + } + +#define make_shared VeraCrypt::make_shared + +} + +#endif // nullptr + +#define make_shared_auto(typeName,instanceName) shared_ptr <typeName> instanceName (new typeName ()) + +#endif // TC_HEADER_Platform_SharedPtr |