src/core/ptr.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 30 Jan 2008 15:33:48 +0100
changeset 2229 31cb5ef6a020
parent 1007 3838d8b043c0
child 2256 50be2c20cd94
permissions -rw-r--r--
remove dependency on Callbacks from Ptr test code
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "ptr.h"
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#ifdef RUN_SELF_TESTS
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include "test.h"
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
namespace ns3 {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    29
class NoCount;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    30
1007
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    31
template <typename T>
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    32
void Foo (void) {}
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
    33
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
class PtrTest : Test
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
{
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
public:
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
  PtrTest ();
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
  virtual ~PtrTest ();
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  virtual bool RunTests (void);
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    40
  void DestroyNotify (void);
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
private:
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
    42
  Ptr<NoCount> CallTest (Ptr<NoCount> p);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
    43
  Ptr<NoCount> const CallTestConst (Ptr<NoCount> const p);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
    44
  uint32_t m_nDestroyed;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
};
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    47
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    48
class Base
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    49
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    50
public:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    51
  Base ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    52
  virtual ~Base ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    53
  void Ref (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    54
  void Unref (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    55
private:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    56
  mutable uint32_t m_count;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    57
};
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    58
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    59
class NoCount : public Base
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    60
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    61
public:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    62
  NoCount (PtrTest *test);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    63
  ~NoCount ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    64
  void Nothing (void) const;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    65
private:
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    66
  PtrTest *m_test;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    67
};
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    68
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    69
Base::Base ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    70
  : m_count (1)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    71
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    72
Base::~Base ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    73
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    74
void 
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    75
Base::Ref (void) const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    76
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    77
  m_count++;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    78
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    79
void 
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    80
Base::Unref (void) const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    81
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    82
  m_count--;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    83
  if (m_count == 0)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    84
    {
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    85
      delete this;
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    86
    }
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    87
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    88
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    89
NoCount::NoCount (PtrTest *test)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    90
  : m_test (test)
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    91
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    92
NoCount::~NoCount ()
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    93
{
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    94
  m_test->DestroyNotify ();
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    95
}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    96
void
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    97
NoCount::Nothing () const
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    98
{}
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
    99
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
PtrTest::PtrTest ()
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
  : Test ("Ptr")
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
{}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
PtrTest::~PtrTest ()
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
{}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
void 
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
PtrTest::DestroyNotify (void)
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
{
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   110
  m_nDestroyed++;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
}
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   112
Ptr<NoCount> 
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   113
PtrTest::CallTest (Ptr<NoCount> p)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   114
{
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   115
  return p;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   116
}
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   118
Ptr<NoCount> const 
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   119
PtrTest::CallTestConst (Ptr<NoCount> const p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   120
{
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   121
  return p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   122
}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   123
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
bool
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
PtrTest::RunTests (void)
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
{
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
  bool ok = true;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   129
  m_nDestroyed = false;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   131
    Ptr<NoCount> p = Create<NoCount> (this);
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
  }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   133
  if (m_nDestroyed != 1)
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
    {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
      ok = false;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
    }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   137
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   138
  m_nDestroyed = 0;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
  {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
    Ptr<NoCount> p;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   141
    p = Create<NoCount> (this);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   142
    p = p;
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
  }
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   144
  if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   145
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   146
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   147
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   148
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   149
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   150
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   151
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   152
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   153
    Ptr<NoCount> p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   154
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   155
  if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   156
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   157
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   158
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   159
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   160
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   161
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   162
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   163
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   164
    Ptr<NoCount> p2;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   165
    p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   166
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   167
  if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   168
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   169
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   170
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   171
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   172
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   173
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   174
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   175
    p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   176
    Ptr<NoCount> p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   177
    p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   178
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   179
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   180
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   181
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   182
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   183
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   184
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   185
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   186
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   187
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   188
    Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   189
    p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   190
    p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   191
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   192
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   193
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   194
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   195
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   196
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   197
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   198
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   199
    Ptr<NoCount> p1;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   200
    p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   201
    p1 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   202
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   203
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   204
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   205
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   206
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   207
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   208
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   209
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   210
    Ptr<NoCount> p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   211
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   212
      Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   213
      p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   214
      p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   215
      p2 = p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   216
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   217
    if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   218
      {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   219
        ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   220
      }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   221
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   222
  if (m_nDestroyed != 2)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   223
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   224
      ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   225
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   226
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   227
  m_nDestroyed = 0;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   228
  {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   229
    Ptr<NoCount> p1;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   230
    {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   231
      Ptr<NoCount> p2;
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   232
      p1 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   233
      p2 = Create<NoCount> (this);
224
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   234
      p2 = CallTest (p1);
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   235
    }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   236
    if (m_nDestroyed != 1)
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   237
      {
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   238
        ok = false;
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   239
      }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   240
  }
47985883d0f4 smart pointer tests. no bugs for now
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 223
diff changeset
   241
  if (m_nDestroyed != 2)
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
    {
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
      ok = false;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
    }
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   245
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   246
  {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   247
    Ptr<NoCount> p1;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   248
    Ptr<NoCount> const p2 = CallTest (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   249
    Ptr<NoCount> const p3 = CallTestConst (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   250
    Ptr<NoCount> p4 = CallTestConst (p1);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   251
    Ptr<NoCount const> p5 = p4;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   252
    //p4 = p5; You cannot make a const pointer be a non-const pointer.
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   253
    // but if you use const_pointer_cast, you can.
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   254
    p4 = const_pointer_cast<NoCount> (p5);
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   255
    p5 = p1;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   256
    Ptr<NoCount> p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   257
    if (p == 0)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   258
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   259
    if (p != 0)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   260
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   261
    if (0 == p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   262
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   263
    if (0 != p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   264
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   265
    if (p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   266
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   267
    if (!p)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   268
      {}
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   269
  }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   270
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   271
  m_nDestroyed = 0;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   272
  {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   273
    NoCount *raw;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   274
    {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   275
      Ptr<NoCount> p = Create<NoCount> (this);
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   276
      {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   277
        Ptr<NoCount const> p1 = p;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   278
      }
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   279
      raw = GetPointer (p);
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   280
      p = 0;
225
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   281
    }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   282
    if (m_nDestroyed != 0)
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   283
      {
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   284
        ok = false;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   285
      }
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   286
    delete raw;
dad23ccd9e6c more tests, fix bugs uncovered by tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 224
diff changeset
   287
  }
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   288
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   289
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   290
  m_nDestroyed = 0;
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   291
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   292
    Ptr<NoCount> p = Create<NoCount> (this);
573
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   293
    const NoCount *v1 = PeekPointer (p);
0da9201a048e rename Ptr::Get and Ptr::Peek to GetPointer and PeekPointer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 569
diff changeset
   294
    NoCount *v2 = PeekPointer (p);
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   295
    v1->Nothing ();
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   296
    v2->Nothing ();
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   297
  }
544
cbc4158d47c9 remove ptr::Remove, make ptr::Peek share the same signature as ptr::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 543
diff changeset
   298
  if (m_nDestroyed != 1)
227
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   299
    {
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   300
      ok = false;
482a61824ef4 add ns3::Ptr<T>::operator * with a few tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 225
diff changeset
   301
    }
567
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   302
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   303
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   304
    Ptr<Base> p0 = Create<NoCount> (this);
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   305
    Ptr<NoCount> p1 = Create<NoCount> (this);
567
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   306
    if (p0 == p1)
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   307
      {
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   308
        ok = false;
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   309
      }
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   310
    if (p0 != p1)
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   311
      {
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   312
      }
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   313
    else
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   314
      {
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   315
        ok = false;
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   316
      }
6fb98941c36f remove leaks and rework the Ptr class to work with a new refcount mechanism
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 544
diff changeset
   317
  }
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   318
#if 0
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   319
  {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 689
diff changeset
   320
    Ptr<NoCount> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   321
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
689
49bccd847179 add tests and fix leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 685
diff changeset
   322
    callback ();
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   323
  }
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   324
  {
732
df256f32b6ae rename MakeNewObject to Create
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 689
diff changeset
   325
    Ptr<const NoCount> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   326
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
689
49bccd847179 add tests and fix leak
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 685
diff changeset
   327
    callback ();
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   328
  }
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   329
#endif
1007
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   330
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   331
#if 0
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   332
  // as expected, fails compilation.
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   333
  {
2229
31cb5ef6a020 remove dependency on Callbacks from Ptr test code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1007
diff changeset
   334
    Ptr<const Base> p = Create<NoCount> (cb);
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   335
    Callback<void> callback = MakeCallback (&NoCount::Nothing, p);
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   336
  }
1007
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   337
  // local types are not allowed as arguments to a template.
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   338
  {
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   339
    class B
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   340
    {
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   341
    public:
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   342
      B () {}
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   343
    };
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   344
    Foo<B> ();
3838d8b043c0 add an extra constructor to use when the Create template cannot be used
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 732
diff changeset
   345
  }
685
2613b7ad02a5 fix bug 23
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 573
diff changeset
   346
#endif
223
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   347
  
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   348
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   349
  return ok;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   350
}
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   351
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   352
PtrTest g_ptr_test;
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   353
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   354
}; // namespace ns3
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   355
80f1c6b76999 initial go at smart pointer implementation
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   356
#endif /* RUN_SELF_TESTS */