File: build

package info (click to toggle)
libsigc%2B%2B-3.0 3.6.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,352 kB
  • sloc: cpp: 6,829; xml: 347; makefile: 197; python: 148; sh: 73
file content (63 lines) | stat: -rw-r--r-- 1,195 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
#!/bin/sh -eu

workdir=$(mktemp -d)
cleanup() {
    rm -fr "$workdir"
}
trap cleanup 0 INT QUIT ABRT PIPE TERM
cd "$workdir"

out=out
<<\EOF g++ -x c++ - -o "$out" $(pkg-config --cflags --libs sigc++-3.0)
// Adapted from https://wiki.inkscape.org/wiki/Using_libsigc%252B%252B_signals

#include <sigc++/sigc++.h>
#include <iostream>

class Emitter
{
public:
   void generateRandomNumbers(int n) {
      for (int i = 0; i < n; i++)
         signal_number_changed.emit(std::rand());
   }

   sigc::signal<void (int)> signal_number_changed;
};

class Receiver
{
public:
   Receiver(Emitter &emitter) {
      emitter.signal_number_changed.connect(
         sigc::mem_fun(*this, &Receiver::_countIfOdd)
      );
   }
   float _getOddProportion() { return (float)odd_count/calls; }

private:
   int odd_count = 0;
   int calls = 0;
   void _countIfOdd(int i) {
      calls++;
      if (i%2 == 1)
         odd_count++;
   }
};

int main()
{
   std::srand(time(nullptr));

   Emitter emitter;
   Receiver receiver(emitter);
   emitter.generateRandomNumbers(2345);
   std::cout << "Odd-even ratio is " << receiver._getOddProportion() << '\n';

   return 0;
}
EOF

echo "build: OK"
./"$out"
echo "run: OK"