~diresu/blender/blender-command-port

« back to all changes in this revision

Viewing changes to extern/fftw/CONVENTIONS

  • Committer: theeth
  • Date: 2008-10-14 16:52:04 UTC
  • Revision ID: vcs-imports@canonical.com-20081014165204-r32w2gm6s0osvdhn
copy back trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Code conventions used internally by fftw3 (not in API):
 
2
 
 
3
LEARN FROM THE MASTERS: read Ken Thompson's C compiler in Plan 9.
 
4
   Avoid learning from C++/Java programs.
 
5
 
 
6
INDENTATION: K&R, 5 spaces/tab.  In case of doubt, indent -kr -i5.
 
7
 
 
8
NAMES: keep them short.  Shorter than you think.  The Bible was written
 
9
   without vowels.  Don't outsmart the Bible.
 
10
 
 
11
   Common names:
 
12
 
 
13
   R       : real type, aka fftw_real
 
14
   E       : real type for local variables (possibly extra precision)
 
15
   C       : complex type
 
16
   sz      : size
 
17
   vecsz   : vector size
 
18
   is, os  : input/output stride
 
19
   ri, ii  : real/imag input (complex data)
 
20
   ro, io  : real/imag output (complex data)
 
21
   I, O    : real input/output (real data)
 
22
   A       : assert
 
23
   CK      : check
 
24
   S       : solver, defined internally to each solver file
 
25
   P       : plan, defined internally to each solver file
 
26
   k       : codelet
 
27
   X(...)  : used for mangling of external names (see below)
 
28
   K(...)  : floating-point constant, in E precision
 
29
 
 
30
   If a name is used often and must have the form fftw_foo to avoid
 
31
   namespace pollution, #define FOO fftw_foo and use the short name.
 
32
 
 
33
   Leave that hungarian crap to MS.  foo_t counts as hungarian: use
 
34
   foo instead.  foo is lowercase so that it does not look like a DOS
 
35
   program. Exception: typedef struct foo_s {...} foo;  instead of
 
36
   typedef struct foo {...} foo;  for C++ compatibility.
 
37
 
 
38
NAME MANGLING: use X(foo) for external names instead of fftw_foo.
 
39
    X(foo) expands to fftwf_foo or fftw_foo, depending on the
 
40
    precision.  (Unfortunately, this is a ugly form of hungarian
 
41
    notation.  Grrr...)  Names that are not exported do not need to be
 
42
    mangled.
 
43
 
 
44
REPEATED CODE: favor a table.  E.g., do not write
 
45
 
 
46
    foo("xxx", 1);
 
47
    foo("yyy", 2);
 
48
    foo("zzz", -1);
 
49
 
 
50
    Instead write
 
51
 
 
52
      struct { const char *nam, int arg } footab[] = {
 
53
        { "xxx", 1 },
 
54
        { "yyy", 2 },
 
55
        { "zzz", -1 }
 
56
      };
 
57
 
 
58
    and loop over footab.  Rationale: it saves code space.
 
59
    Similarly, replace a switch statement with a table whenever
 
60
    possible.
 
61
 
 
62
C++: The code should compile as a C++ program. Run the code through
 
63
    gcc -xc++ .  The extra C++ restrictions are unnecessary, of
 
64
    course, but this will save us from a flood of complaints when
 
65
    we release the code.