File: main.cpp

package info (click to toggle)
cbmc 6.6.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,852 kB
  • sloc: cpp: 386,459; ansic: 114,466; java: 28,405; python: 6,003; yacc: 4,552; makefile: 4,041; lex: 2,487; xml: 2,388; sh: 2,050; perl: 557; pascal: 184; javascript: 163; ada: 36
file content (74 lines) | stat: -rw-r--r-- 1,085 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <cassert>

#define INSIDE

class sc_uint_subref;

class sc_uint_base
{
 friend class sc_uint_subref;

 public:
  sc_uint_base(unsigned long v)
    : val(v)
  {
  }

  sc_uint_subref range(int left, int right)
#ifndef INSIDE
  ;
#else
  {
    return sc_uint_subref(this, left, right);
  }
#endif

 protected:
  unsigned long val;
};

class sc_uint_subref
{
 friend class sc_uint_base;

 public:
  sc_uint_subref() {}
  sc_uint_subref(sc_uint_base *_ptr, int _left, int _right)
    : left(_left), right(_right), ptr(_ptr)
  {}

  bool operator==(const sc_uint_base &other)
  {
    return ptr->val == other.val;
  }

  sc_uint_subref &operator=(const sc_uint_subref &other)
  {
    ptr = other.ptr;
    left = other.left;
    right = other.right;
    return *this;
  }

 protected:
  int left, right;
  sc_uint_base *ptr;

};

#ifndef INSIDE
sc_uint_subref sc_uint_base::range(int left, int right)
{
  return sc_uint_subref(this, left, right);
}
#endif

int main(int argc, char** argv)
{
  sc_uint_base x(42);
  sc_uint_subref y = x.range(0,5);

  assert(y == x);

  return 0;
}