File: binopsbase

package info (click to toggle)
bobcat 6.11.00-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,292 kB
  • sloc: cpp: 21,370; fortran: 6,507; makefile: 2,787; sh: 724; perl: 401; ansic: 26
file content (56 lines) | stat: -rw-r--r-- 1,319 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
#ifndef INCLUDED_BOBCAT_BINOPSBASE_
#define INCLUDED_BOBCAT_BINOPSBASE_

#include <utility>
#include <istream>
#include <ostream>

namespace FBB
{
    // The recursively defined BinopsBase0 class: receives so a static
    // cast becomes available to reach the basic arithmetic classes

    // The general declaration:
    //
template <class Derived, int ...ops>
class BinopsBase0;

    // The terminating definition:
    //
template <class Derived>
class BinopsBase0<Derived>
{};

#include "mul.f"
#include "div.f"
#include "mod.f"
#include "add.f"
#include "sub.f"
#include "shl.f"
#include "shr.f"
#include "and.f"
#include "or.f"
#include "xor.f"
#include "insert.f"
#include "extract.f"

    // The class BinopsBase befriends all arithmetic classes, and implements
    // wrappers for the arithmetic functions potentially defined in
    // Derived.
    // The arithmetic classes call BinopsBase' functions, which in turn call
    // Derived's functions. This way Derived only needs to implement the
    // necessary functions. Since the other functions aren't called, they
    // arent't instantiated so there are no linker-errors
    //
template <class Derived, int ...ops>
class BinopsBase: public BinopsBase0<Derived, ops...>
{
#include "friends.f"

#include "wraps.f"
};

#include "inlines.f"

} // FBB
#endif