1// Class Foo
2#pragma implementation
3
4
5// We don't use header files, since we only want to see, whether the
6// compiler is installed properly.
7//
8#if __GNUG__ >= 2
9typedef __SIZE_TYPE__ size_t;
10#else
11typedef unsigned int size_t;
12#endif
13
14extern "C" {
15    char *strncpy (char* dest, const char* src, size_t len);
16    int printf (const char*, ...);
17};
18
19#include "cdtest-foo.h"
20
21int Foo::foos = 0;
22
23void Foo::init_foo ()
24{
25    printf ("BROKENLY calling Foo::init_foo from __init_start; size_of(Foo) = %ld\n", (long) sizeof(Foo));
26    foos = FOOLISH_NUMBER;
27}
28
29
30Foo::Foo ()
31{
32    i = ++foos;
33    strncpy (message, "default-foo", len);
34#ifdef WITH_ADDR
35    printf ("Constructing Foo(%d) \"default-foo\" at %08x\n", i, this);
36#else
37    printf ("Constructing Foo(%d) \"default-foo\"\n", i);
38#endif
39}
40
41Foo::Foo (const char* msg)
42{
43    i = ++foos;
44    strncpy( message, msg, len);
45#ifdef WITH_ADDR
46    printf ( "Constructing Foo(%d) \"%s\" at %08x\n", i, message, this);
47#else
48    printf ( "Constructing Foo(%d) \"%s\"\n", i, message);
49#endif
50}
51
52
53Foo::Foo (const Foo& foo)
54{
55    i = ++foos;
56#ifdef WITH_ADDR
57    printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n",
58	    i, foo.message, this, foo.i, &foo);
59#else
60   printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i);
61#endif
62    for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
63}
64
65
66Foo& Foo::operator= (const Foo& foo)
67{
68#ifdef WITH_ADDR
69    printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n",
70	    foo.i, foo.message, &foo, i, this);
71#else
72   printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i);
73#endif
74    for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
75    return *this;
76}
77
78
79Foo::~Foo ()
80{
81    foos--;
82#ifdef WITH_ADDR
83    printf ("Destructing Foo(%d) \"%s\" at %08x (remaining foos: %d)\n",
84	    i, message, this, foos);
85#else
86    printf ("Destructing Foo(%d) \"%s\" (remaining foos: %d)\n",
87	    i, message, foos);
88#endif
89}
90