File: class.cpp

package info (click to toggle)
libpulp 0.2.8-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,964 kB
  • sloc: ansic: 11,257; python: 1,110; sh: 881; makefile: 824; cpp: 582; asm: 124
file content (90 lines) | stat: -rw-r--r-- 1,183 bytes parent folder | download
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <unistd.h>
#include <math.h>

typedef double vec3_t[3];
#define noinline __attribute__((noinline))

static double dot(vec3_t u, vec3_t v)
{
  return u[0]*v[0] + u[1]*v[1] + u[2]*v[2];
}

// Will be livepatched.
static noinline double norm(vec3_t v)
{
  return sqrt(dot(v, v));
}

class Point
{
  protected:
  double x, y;

  public:
  Point(double x, double y);

  double Get_X(void) const;
  double Get_Y(void) const;
};

class Point3D : public Point
{
  protected:
  double z;

  public:
  Point3D(double x, double y, double z);
  double Norm(void);

  double Get_Z(void) const;

};

double Point::Get_X(void) const
{
  return x;
}

double Point::Get_Y(void) const
{
  return y;
}

Point::Point(double x, double y)
{
  this->x = x;
  this->y = y;
}

Point3D::Point3D(double x, double y, double z) : Point(x, y)
{
  this->z = z;
}

double Point3D::Get_Z(void) const
{
  return z;
}

double Point3D::Norm(void)
{
  vec3_t v = {x, y, z};
  return norm(v);
}

extern "C" double some_function(vec3_t v)
{
  return norm(v) * norm(v);
}

int main(void)
{
  Point3D p(3, 4, 5);
  while (1) {
    std::cout << p.Norm() << '\n';
    sleep(1);
  }

  return 0;
}