File: frog.cpp

package info (click to toggle)
crystalspace 0.94-20020412-3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 62,276 kB
  • ctags: 52,843
  • sloc: cpp: 274,783; ansic: 6,608; perl: 6,276; objc: 3,952; asm: 2,942; python: 2,354; php: 542; pascal: 530; sh: 430; makefile: 370; awk: 193
file content (79 lines) | stat: -rw-r--r-- 1,629 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
/*
    This program demonstrates an SCF object with an embedded interface
    made using multiple inheritance. Also it demonstrates that there
    are no special tricks for using a SCF class either with static linking
    (linked into executable) or with dynamic linking. For this class is
    always statically linked into the executable and then is registered
    at run time using scfRegisterClass()
*/

#include "cssysdef.h"
#include "ifrog.h"
#include "iname.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

class csFrog : public iFrog, public iName
{
  char *Name;
public:
  SCF_DECLARE_IBASE;

  csFrog (iBase *iParent);
  virtual ~csFrog ();
  virtual void Jump ();
  virtual void Croak (char *iWhat);
  virtual char *GetName ();
  virtual void SetName (char *iName);
};

//--------------- implementation ----------------

SCF_IMPLEMENT_IBASE (csFrog)
  SCF_IMPLEMENTS_INTERFACE (iFrog)
  SCF_IMPLEMENTS_INTERFACE (iName)
SCF_IMPLEMENT_IBASE_END

csFrog::csFrog (iBase *iParent)
{
  SCF_CONSTRUCT_IBASE (iParent);
  Name = NULL;
}

csFrog::~csFrog ()
{
  printf ("Frog %s dies ...\n", Name);
  if (Name)
    free (Name);
}

void csFrog::Jump ()
{
  printf ("Frog %s jumps\n", Name);
}

void csFrog::Croak (char *iWhat)
{
  printf ("%s: Croak, Croa-a-a-ak, %s!\n", Name, iWhat);
}

char *csFrog::GetName ()
{
  return Name;
}

void csFrog::SetName (char *iName)
{
  if (Name)
    free (Name);
  Name = strdup (iName);
}

// ... and now export all classes

SCF_IMPLEMENT_FACTORY (csFrog)

SCF_EXPORT_CLASS_TABLE (Frog)
  SCF_EXPORT_CLASS (csFrog, "test.frog", "A Frog that croaks")
SCF_EXPORT_CLASS_TABLE_END