Browse Source

Remove unused ThreadSafePointerTo class

It seems that this was created when regular PointerTo was not yet atomic, and never used or updated.
rdb 6 years ago
parent
commit
9e1b40bbb7

+ 0 - 6
makepanda/makepanda.vcproj

@@ -2147,7 +2147,6 @@
 				<File RelativePath="..\panda\src\express\test_types.cxx"></File>
 				<File RelativePath="..\panda\src\express\test_types.cxx"></File>
 				<File RelativePath="..\panda\src\express\weakPointerTo.I"></File>
 				<File RelativePath="..\panda\src\express\weakPointerTo.I"></File>
 				<File RelativePath="..\panda\src\express\pta_int.cxx"></File>
 				<File RelativePath="..\panda\src\express\pta_int.cxx"></File>
-				<File RelativePath="..\panda\src\express\threadSafePointerToBase.I"></File>
 				<File RelativePath="..\panda\src\express\namable.I"></File>
 				<File RelativePath="..\panda\src\express\namable.I"></File>
 				<File RelativePath="..\panda\src\express\vector_float.cxx"></File>
 				<File RelativePath="..\panda\src\express\vector_float.cxx"></File>
 				<File RelativePath="..\panda\src\express\pointerTo.h"></File>
 				<File RelativePath="..\panda\src\express\pointerTo.h"></File>
@@ -2174,7 +2173,6 @@
 				<File RelativePath="..\panda\src\express\datagramGenerator.h"></File>
 				<File RelativePath="..\panda\src\express\datagramGenerator.h"></File>
 				<File RelativePath="..\panda\src\express\weakPointerToVoid.h"></File>
 				<File RelativePath="..\panda\src\express\weakPointerToVoid.h"></File>
 				<File RelativePath="..\panda\src\express\datagram.I"></File>
 				<File RelativePath="..\panda\src\express\datagram.I"></File>
-				<File RelativePath="..\panda\src\express\threadSafePointerTo.h"></File>
 				<File RelativePath="..\panda\src\express\weakPointerCallback.h"></File>
 				<File RelativePath="..\panda\src\express\weakPointerCallback.h"></File>
 				<File RelativePath="..\panda\src\express\datagram.h"></File>
 				<File RelativePath="..\panda\src\express\datagram.h"></File>
 				<File RelativePath="..\panda\src\express\textEncoder.h"></File>
 				<File RelativePath="..\panda\src\express\textEncoder.h"></File>
@@ -2215,7 +2213,6 @@
 				<File RelativePath="..\panda\src\express\datagramIterator.I"></File>
 				<File RelativePath="..\panda\src\express\datagramIterator.I"></File>
 				<File RelativePath="..\panda\src\express\vector_uchar.h"></File>
 				<File RelativePath="..\panda\src\express\vector_uchar.h"></File>
 				<File RelativePath="..\panda\src\express\datagramIterator.h"></File>
 				<File RelativePath="..\panda\src\express\datagramIterator.h"></File>
-				<File RelativePath="..\panda\src\express\threadSafePointerTo.cxx"></File>
 				<File RelativePath="..\panda\src\express\datagramGenerator.cxx"></File>
 				<File RelativePath="..\panda\src\express\datagramGenerator.cxx"></File>
 				<File RelativePath="..\panda\src\express\hashGeneratorBase.h"></File>
 				<File RelativePath="..\panda\src\express\hashGeneratorBase.h"></File>
 				<File RelativePath="..\panda\src\express\patchfile.cxx"></File>
 				<File RelativePath="..\panda\src\express\patchfile.cxx"></File>
@@ -2259,7 +2256,6 @@
 				<File RelativePath="..\panda\src\express\namable.cxx"></File>
 				<File RelativePath="..\panda\src\express\namable.cxx"></File>
 				<File RelativePath="..\panda\src\express\trueClock.I"></File>
 				<File RelativePath="..\panda\src\express\trueClock.I"></File>
 				<File RelativePath="..\panda\src\express\config_express.cxx"></File>
 				<File RelativePath="..\panda\src\express\config_express.cxx"></File>
-				<File RelativePath="..\panda\src\express\threadSafePointerToBase.cxx"></File>
 				<File RelativePath="..\panda\src\express\pointerToVoid.I"></File>
 				<File RelativePath="..\panda\src\express\pointerToVoid.I"></File>
 				<File RelativePath="..\panda\src\express\vector_uchar.cxx"></File>
 				<File RelativePath="..\panda\src\express\vector_uchar.cxx"></File>
 				<File RelativePath="..\panda\src\express\vector_float.h"></File>
 				<File RelativePath="..\panda\src\express\vector_float.h"></File>
@@ -2286,7 +2282,6 @@
 				<File RelativePath="..\panda\src\express\datagramGenerator.I"></File>
 				<File RelativePath="..\panda\src\express\datagramGenerator.I"></File>
 				<File RelativePath="..\panda\src\express\compress_string.cxx"></File>
 				<File RelativePath="..\panda\src\express\compress_string.cxx"></File>
 				<File RelativePath="..\panda\src\express\subStreamBuf.cxx"></File>
 				<File RelativePath="..\panda\src\express\subStreamBuf.cxx"></File>
-				<File RelativePath="..\panda\src\express\threadSafePointerToBase.h"></File>
 				<File RelativePath="..\panda\src\express\pointerToArrayBase.cxx"></File>
 				<File RelativePath="..\panda\src\express\pointerToArrayBase.cxx"></File>
 				<File RelativePath="..\panda\src\express\express_composite.cxx"></File>
 				<File RelativePath="..\panda\src\express\express_composite.cxx"></File>
 				<File RelativePath="..\panda\src\express\virtualFileComposite.I"></File>
 				<File RelativePath="..\panda\src\express\virtualFileComposite.I"></File>
@@ -2294,7 +2289,6 @@
 				<File RelativePath="..\panda\src\express\multifile.I"></File>
 				<File RelativePath="..\panda\src\express\multifile.I"></File>
 				<File RelativePath="..\panda\src\express\virtualFile.I"></File>
 				<File RelativePath="..\panda\src\express\virtualFile.I"></File>
 				<File RelativePath="..\panda\src\express\patchfile.I"></File>
 				<File RelativePath="..\panda\src\express\patchfile.I"></File>
-				<File RelativePath="..\panda\src\express\threadSafePointerTo.I"></File>
 				<File RelativePath="..\panda\src\express\virtualFileList.h"></File>
 				<File RelativePath="..\panda\src\express\virtualFileList.h"></File>
 			</Filter>
 			</Filter>
 			<Filter Name="iphonedisplay">
 			<Filter Name="iphonedisplay">

+ 0 - 2
panda/src/express/p3express_composite2.cxx

@@ -8,8 +8,6 @@
 #include "subStream.cxx"
 #include "subStream.cxx"
 #include "subStreamBuf.cxx"
 #include "subStreamBuf.cxx"
 #include "temporaryFile.cxx"
 #include "temporaryFile.cxx"
-#include "threadSafePointerTo.cxx"
-#include "threadSafePointerToBase.cxx"
 #include "trueClock.cxx"
 #include "trueClock.cxx"
 #include "typedReferenceCount.cxx"
 #include "typedReferenceCount.cxx"
 #include "virtualFile.cxx"
 #include "virtualFile.cxx"

+ 0 - 207
panda/src/express/threadSafePointerTo.I

@@ -1,207 +0,0 @@
-/**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University.  All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license.  You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file threadSafePointerTo.I
- * @author drose
- * @date 2006-04-28
- */
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerTo<T>::
-ThreadSafePointerTo(To *ptr) : ThreadSafePointerToBase<T>(ptr) {
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerTo<T>::
-ThreadSafePointerTo(const ThreadSafePointerTo<T> &copy) :
-  ThreadSafePointerToBase<T>((const ThreadSafePointerToBase<T> &)copy)
-{
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerTo<T>::
-~ThreadSafePointerTo() {
-}
-
-/**
- *
- */
-template<class T>
-INLINE typename ThreadSafePointerTo<T>::To &ThreadSafePointerTo<T>::
-operator *() const {
-  return *((To *)AtomicAdjust::get_ptr(this->_void_ptr));
-}
-
-/**
- *
- */
-template<class T>
-INLINE typename ThreadSafePointerTo<T>::To *ThreadSafePointerTo<T>::
-operator -> () const {
-  return (To *)AtomicAdjust::get_ptr(this->_void_ptr);
-}
-
-/**
- * We also have the typecast operator to automatically convert
- * ThreadSafePointerTo's to the required kind of actual pointer.  This
- * introduces ambiguities which the compiler will resolve one way or the
- * other, but we don't care which way it goes because either will be correct.
- */
-template<class T>
-INLINE ThreadSafePointerTo<T>::
-operator T * () const {
-  return (To *)AtomicAdjust::get_ptr(this->_void_ptr);
-}
-
-/**
- * Returns an ordinary pointer instead of a ThreadSafePointerTo.  Useful to
- * work around compiler problems, particularly for implicit upcasts.
- */
-template<class T>
-INLINE typename ThreadSafePointerTo<T>::To *ThreadSafePointerTo<T>::
-p() const {
-  return (To *)AtomicAdjust::get_ptr(this->_void_ptr);
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerTo<T> &ThreadSafePointerTo<T>::
-operator = (To *ptr) {
-  this->reassign(ptr);
-  return *this;
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerTo<T> &ThreadSafePointerTo<T>::
-operator = (const ThreadSafePointerTo<T> &copy) {
-  this->reassign((const ThreadSafePointerToBase<T> &)copy);
-  return *this;
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T>::
-ThreadSafeConstPointerTo(const typename ThreadSafeConstPointerTo<T>::To *ptr) :
-  ThreadSafePointerToBase<T>((typename ThreadSafeConstPointerTo<T>::To *)ptr)
-{
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T>::
-ThreadSafeConstPointerTo(const ThreadSafePointerTo<T> &copy) :
-  ThreadSafePointerToBase<T>((const ThreadSafePointerToBase<T> &)copy)
-{
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T>::
-~ThreadSafeConstPointerTo() {
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T>::
-ThreadSafeConstPointerTo(const ThreadSafeConstPointerTo<T> &copy) :
-  ThreadSafePointerToBase<T>((const ThreadSafePointerToBase<T> &)copy)
-{
-}
-
-/**
- *
- */
-template<class T>
-INLINE const typename ThreadSafeConstPointerTo<T>::To &ThreadSafeConstPointerTo<T>::
-operator *() const {
-  return *((To *)AtomicAdjust::get_ptr(this->_void_ptr));
-}
-
-/**
- *
- */
-template<class T>
-INLINE const typename ThreadSafeConstPointerTo<T>::To *ThreadSafeConstPointerTo<T>::
-operator -> () const {
-  return (To *)AtomicAdjust::get_ptr(this->_void_ptr);
-}
-
-/**
- * We also have the typecast operator to automatically convert
- * ThreadSafeConstPointerTo's to the required kind of actual pointer.  This
- * introduces ambiguities which the compiler will resolve one way or the
- * other, but we don't care which way it goes because either will be correct.
- */
-
-template<class T>
-INLINE ThreadSafeConstPointerTo<T>::
-operator const T * () const {
-  return (To *)AtomicAdjust::get_ptr(this->_void_ptr);
-}
-
-/**
- * Returns an ordinary pointer instead of a ThreadSafeConstPointerTo.  Useful
- * to work around compiler problems, particularly for implicit upcasts.
- */
-template<class T>
-INLINE const typename ThreadSafeConstPointerTo<T>::To *ThreadSafeConstPointerTo<T>::
-p() const {
-  return (To *)AtomicAdjust::get_ptr(this->_void_ptr);
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T> &ThreadSafeConstPointerTo<T>::
-operator = (const To *ptr) {
-  this->reassign((To *)ptr);
-  return *this;
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T> &ThreadSafeConstPointerTo<T>::
-operator = (const ThreadSafePointerTo<T> &copy) {
-  this->reassign((const ThreadSafePointerToBase<T> &)copy);
-  return *this;
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafeConstPointerTo<T> &ThreadSafeConstPointerTo<T>::
-operator = (const ThreadSafeConstPointerTo<T> &copy) {
-  this->reassign((const ThreadSafePointerToBase<T> &)copy);
-  return *this;
-}

+ 0 - 14
panda/src/express/threadSafePointerTo.cxx

@@ -1,14 +0,0 @@
-/**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University.  All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license.  You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file threadSafePointerTo.cxx
- * @author drose
- * @date 2006-04-28
- */
-
-#include "threadSafePointerTo.h"

+ 0 - 105
panda/src/express/threadSafePointerTo.h

@@ -1,105 +0,0 @@
-/**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University.  All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license.  You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file threadSafePointerTo.h
- * @author drose
- * @date 2006-04-28
- */
-
-#ifndef THREADSAFEPOINTERTO_H
-#define THREADSAFEPOINTERTO_H
-
-#include "pandabase.h"
-#include "threadSafePointerToBase.h"
-
-/**
- * This works exactly like PointerTo, except that the object is designed to be
- * thread-safe: it is generally safe to make unprotected assignments to this
- * pointer, in the sense that the last assignment will win and the reference
- * counts will be properly maintained.
- */
-template <class T>
-class ThreadSafePointerTo : public ThreadSafePointerToBase<T> {
-public:
-  typedef typename ThreadSafePointerToBase<T>::To To;
-PUBLISHED:
-  INLINE ThreadSafePointerTo(To *ptr = nullptr);
-  INLINE ThreadSafePointerTo(const ThreadSafePointerTo<T> &copy);
-  INLINE ~ThreadSafePointerTo();
-
-public:
-  INLINE To &operator *() const;
-  INLINE To *operator -> () const;
-  // MSVC.NET 2005 insists that we use T *, and not To *, here.
-  INLINE operator T *() const;
-
-PUBLISHED:
-  // When downcasting to a derived class from a
-  // ThreadSafePointerTo<BaseClass>, C++ would normally require you to cast
-  // twice: once to an actual BaseClass pointer, and then again to your
-  // desired pointer.  You can use the handy function p() to avoid this first
-  // cast and make your code look a bit cleaner.
-
-  // e.g.  instead of (MyType *)(BaseClass *)ptr, use (MyType *)ptr.p()
-
-  // If your base class is a derivative of TypedObject, you might want to use
-  // the DCAST macro defined in typedObject.h instead, e.g.  DCAST(MyType,
-  // ptr).  This provides a clean downcast that doesn't require .p() or any
-  // double-casting, and it can be run-time checked for correctness.
-  INLINE To *p() const;
-
-  INLINE ThreadSafePointerTo<T> &operator = (To *ptr);
-  INLINE ThreadSafePointerTo<T> &operator = (const ThreadSafePointerTo<T> &copy);
-
-  // These functions normally wouldn't need to be redefined here, but we do so
-  // anyway just to help out interrogate (which doesn't seem to want to
-  // automatically export the ThreadSafePointerToBase class).  When this works
-  // again in interrogate, we can remove these.
-  INLINE bool is_null() const { return ThreadSafePointerToBase<T>::is_null(); }
-  INLINE void clear() { ThreadSafePointerToBase<T>::clear(); }
-};
-
-
-/**
- *
- */
-template <class T>
-class ThreadSafeConstPointerTo : public ThreadSafePointerToBase<T> {
-public:
-  typedef typename ThreadSafePointerToBase<T>::To To;
-PUBLISHED:
-  INLINE ThreadSafeConstPointerTo(const To *ptr = nullptr);
-  INLINE ThreadSafeConstPointerTo(const ThreadSafePointerTo<T> &copy);
-  INLINE ThreadSafeConstPointerTo(const ThreadSafeConstPointerTo<T> &copy);
-  INLINE ~ThreadSafeConstPointerTo();
-
-public:
-  INLINE const To &operator *() const;
-  INLINE const To *operator -> () const;
-  INLINE operator const T *() const;
-
-PUBLISHED:
-  INLINE const To *p() const;
-
-  INLINE ThreadSafeConstPointerTo<T> &operator = (const To *ptr);
-  INLINE ThreadSafeConstPointerTo<T> &operator = (const ThreadSafePointerTo<T> &copy);
-  INLINE ThreadSafeConstPointerTo<T> &operator = (const ThreadSafeConstPointerTo<T> &copy);
-
-  // This functions normally wouldn't need to be redefined here, but we do so
-  // anyway just to help out interrogate (which doesn't seem to want to
-  // automatically export the ThreadSafePointerToBase class).  When this works
-  // again in interrogate, we can remove this.
-  INLINE void clear() { ThreadSafePointerToBase<T>::clear(); }
-};
-
-#define TSPT(type) ThreadSafePointerTo< type >
-#define TSCPT(type) ThreadSafeConstPointerTo< type >
-
-#include "threadSafePointerTo.I"
-
-#endif

+ 0 - 132
panda/src/express/threadSafePointerToBase.I

@@ -1,132 +0,0 @@
-/**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University.  All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license.  You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file threadSafePointerToBase.I
- * @author drose
- * @date 2006-04-28
- */
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerToBase<T>::
-ThreadSafePointerToBase(To *ptr) {
-  reassign(ptr);
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerToBase<T>::
-ThreadSafePointerToBase(const ThreadSafePointerToBase<T> &copy) {
-  reassign(copy);
-}
-
-/**
- *
- */
-template<class T>
-INLINE ThreadSafePointerToBase<T>::
-~ThreadSafePointerToBase() {
-  reassign(nullptr);
-}
-
-/**
- * This is the main work of the ThreadSafePointerTo family.  When the pointer
- * is reassigned, decrement the old reference count and increment the new one.
- */
-template<class T>
-INLINE void ThreadSafePointerToBase<T>::
-reassign(To *ptr) {
-  To *old_ptr = (To *)AtomicAdjust::get_ptr(_void_ptr);
-  if (ptr == old_ptr) {
-    return;
-  }
-
-#ifdef HAVE_THREADS
-  void *orig_ptr = AtomicAdjust::compare_and_exchange_ptr(_void_ptr, old_ptr, ptr);
-  while (orig_ptr != old_ptr) {
-    // Some other thread assigned it first.  Try again.
-    old_ptr = (To *)AtomicAdjust::get_ptr(_void_ptr);
-    if (ptr == old_ptr) {
-      return;
-    }
-
-    orig_ptr = AtomicAdjust::compare_and_exchange_ptr(_void_ptr, old_ptr, ptr);
-  }
-#else  // HAVE_THREADS
-  _void_ptr = ptr;
-#endif  // HAVE_THREADS
-
-  if (ptr != nullptr) {
-    ptr->ref();
-#ifdef DO_MEMORY_USAGE
-    if (MemoryUsage::get_track_memory_usage()) {
-      update_type(ptr);
-    }
-#endif
-  }
-
-  // Now delete the old pointer.
-  if (old_ptr != nullptr) {
-    unref_delete(old_ptr);
-  }
-}
-
-/**
- *
- */
-template<class T>
-INLINE void ThreadSafePointerToBase<T>::
-reassign(const ThreadSafePointerToBase<To> &copy) {
-  reassign((To *)copy._void_ptr);
-}
-
-/**
- * Ensures that the MemoryUsage record for the pointer has the right type of
- * object, if we know the type ourselves.
- */
-template<class T>
-void ThreadSafePointerToBase<T>::
-update_type(To *ptr) {
-#ifdef DO_MEMORY_USAGE
-  TypeHandle type = get_type_handle(To);
-  if (type == TypeHandle::none()) {
-    do_init_type(To);
-    type = get_type_handle(To);
-  }
-  if (type != TypeHandle::none()) {
-    MemoryUsage::update_type(ptr, type);
-  }
-#endif  // DO_MEMORY_USAGE
-}
-
-/**
- * A convenient way to set the ThreadSafePointerTo object to NULL. (Assignment
- * to a NULL pointer also works, of course.)
- */
-template<class T>
-INLINE void ThreadSafePointerToBase<T>::
-clear() {
-  reassign(nullptr);
-}
-
-/**
- * A handy function to output ThreadSafePointerTo's as a hex pointer followed
- * by a reference count.
- */
-template<class T>
-INLINE void ThreadSafePointerToBase<T>::
-output(std::ostream &out) const {
-  out << _void_ptr;
-  if (_void_ptr != nullptr) {
-    out << ":" << ((To *)_void_ptr)->get_ref_count();
-  }
-}

+ 0 - 14
panda/src/express/threadSafePointerToBase.cxx

@@ -1,14 +0,0 @@
-/**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University.  All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license.  You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file threadSafePointerToBase.cxx
- * @author drose
- * @date 2006-04-28
- */
-
-#include "threadSafePointerToBase.h"

+ 0 - 63
panda/src/express/threadSafePointerToBase.h

@@ -1,63 +0,0 @@
-/**
- * PANDA 3D SOFTWARE
- * Copyright (c) Carnegie Mellon University.  All rights reserved.
- *
- * All use of this software is subject to the terms of the revised BSD
- * license.  You should have received a copy of this license along
- * with this source code in a file named "LICENSE."
- *
- * @file threadSafePointerToBase.h
- * @author drose
- * @date 2006-04-28
- */
-
-#ifndef THREADSAFEPOINTERTOBASE_H
-#define THREADSAFEPOINTERTOBASE_H
-
-#include "pandabase.h"
-#include "pointerToVoid.h"
-#include "referenceCount.h"
-#include "typedef.h"
-#include "memoryUsage.h"
-#include "config_express.h"
-#include "atomicAdjust.h"
-
-/**
- * This is the base class for ThreadSafePointerTo and
- * ThreadSafeConstPointerTo.  Don't try to use it directly; use either derived
- * class instead.
- */
-template <class T>
-class ThreadSafePointerToBase : public PointerToVoid {
-public:
-  typedef T To;
-
-protected:
-  INLINE ThreadSafePointerToBase(To *ptr);
-  INLINE ThreadSafePointerToBase(const ThreadSafePointerToBase<T> &copy);
-  INLINE ~ThreadSafePointerToBase();
-
-  INLINE void reassign(To *ptr);
-  INLINE void reassign(const ThreadSafePointerToBase<To> &copy);
-
-  void update_type(To *ptr);
-
-  // No assignment or retrieval functions are declared in
-  // ThreadSafePointerToBase, because we will have to specialize on const vs.
-  // non-const later.
-
-PUBLISHED:
-  INLINE void clear();
-
-  void output(std::ostream &out) const;
-};
-
-template<class T>
-INLINE std::ostream &operator <<(std::ostream &out, const ThreadSafePointerToBase<T> &pointer) {
-  pointer.output(out);
-  return out;
-}
-
-#include "threadSafePointerToBase.I"
-
-#endif