OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.mike/] [p8018.C] - Diff between revs 305 and 338

Only display areas with differences | Details | Blame | View Log

Rev 305 Rev 338
// { dg-do run  }
// { dg-do run  }
// prms-id: 8018
// prms-id: 8018
class RefCount {
class RefCount {
private:
private:
  int nref;
  int nref;
public:
public:
  RefCount() : nref(0) {}
  RefCount() : nref(0) {}
  ~RefCount() {}
  ~RefCount() {}
  int nrefs() const { return nref; }
  int nrefs() const { return nref; }
  int reference() {
  int reference() {
    nref++;
    nref++;
    return nref;
    return nref;
  }
  }
  int unreference() {
  int unreference() {
    nref--;
    nref--;
    return nref;
    return nref;
  }
  }
};
};
class A : public RefCount {
class A : public RefCount {
public:
public:
  A() {}
  A() {}
  ~A() {}
  ~A() {}
};
};
class RefA {
class RefA {
private:
private:
  A *p;
  A *p;
  void clear() {
  void clear() {
    if (p) {
    if (p) {
      p->unreference();
      p->unreference();
      if (!p->nrefs())
      if (!p->nrefs())
        delete p;
        delete p;
    }
    }
  }
  }
public:
public:
  RefA(A* a) : p(a) { if (p) p->reference(); }
  RefA(A* a) : p(a) { if (p) p->reference(); }
  RefA(const RefA& a) : p(a.p) { if (p) p->reference(); }
  RefA(const RefA& a) : p(a.p) { if (p) p->reference(); }
  ~RefA() { clear(); }
  ~RefA() { clear(); }
  A* operator->() { return p; }
  A* operator->() { return p; }
  RefA& operator=(const RefA& a) {
  RefA& operator=(const RefA& a) {
    clear();
    clear();
    p=a.p;
    p=a.p;
    if (p)
    if (p)
      p->reference();
      p->reference();
    return *this;
    return *this;
  }
  }
  RefA& operator=(A* a) {
  RefA& operator=(A* a) {
    clear();
    clear();
    p=a;
    p=a;
    if (p)
    if (p)
      p->reference();
      p->reference();
    return *this;
    return *this;
  }
  }
};
};
class AccRefA {
class AccRefA {
private:
private:
  RefA a;
  RefA a;
public:
public:
  AccRefA(A* ap) : a(ap) {}
  AccRefA(A* ap) : a(ap) {}
  AccRefA(const RefA& ar) : a(ar) {}
  AccRefA(const RefA& ar) : a(ar) {}
  ~AccRefA() {}
  ~AccRefA() {}
  operator RefA&() { return a; }
  operator RefA&() { return a; }
  RefA& result() { return a; }
  RefA& result() { return a; }
};
};
int
int
main() {
main() {
  RefA a1 = new A;
  RefA a1 = new A;
  AccRefA aa1(a1);
  AccRefA aa1(a1);
  RefA a3 = aa1;
  RefA a3 = aa1;
  if (a1->nrefs() != 3)
  if (a1->nrefs() != 3)
    return 1;
    return 1;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.