File: algos.h

package info (click to toggle)
golly 3.3-1.1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 20,176 kB
  • sloc: cpp: 72,638; ansic: 25,919; python: 7,921; sh: 4,245; objc: 3,721; java: 2,781; xml: 1,362; makefile: 530; javascript: 279; perl: 69
file content (118 lines) | stat: -rw-r--r-- 4,155 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// This file is part of Golly.
// See docs/License.html for the copyright notice.

#ifndef _ALGOS_H_
#define _ALGOS_H_

#include "lifealgo.h"

#include "utils.h"      // for gColor

// for storing icon info:
typedef struct {
    int wd;
    int ht;
    unsigned char* pxldata;     // RGBA data (size = wd * ht * 4)
} gBitmap;
typedef gBitmap* gBitmapPtr;

// Golly supports multiple algorithms.  The first algorithm
// registered must *always* be qlifealgo.  The second must
// *always* be hlifealgo.  The order of the rest does not matter.

enum {
    QLIFE_ALGO,     // QuickLife
    HLIFE_ALGO      // HashLife
};

const int MAX_ALGOS = 50;         // maximum number of algorithms
typedef int algo_type;            // 0..MAX_ALGOS-1

// A class for all the static info we need about a particular algorithm:

class AlgoData : public staticAlgoInfo {
public:
    AlgoData();
    virtual void setDefaultBaseStep(int v) { defbase = v; }

    // all hashing algos use maxhashmem and QuickLife uses 0 (unlimited)
    // virtual void setDefaultMaxMem(int v) { }

    static AlgoData& tick();      // static allocator

    // additional data
    bool canhash;                 // algo uses hashing?
    int defbase;                  // default base step

    gColor statusrgb;             // status bar color

    gBitmapPtr* icons7x7;         // icon bitmaps for scale 1:8
    gBitmapPtr* icons15x15;       // icon bitmaps for scale 1:16
    gBitmapPtr* icons31x31;       // icon bitmaps for scale 1:32

    // default color scheme
    bool gradient;                // use color gradient?
    gColor fromrgb;               // color at start of gradient
    gColor torgb;                 // color at end of gradient

    // if gradient is false then use these colors for each cell state
    unsigned char algor[256];
    unsigned char algog[256];
    unsigned char algob[256];
};

extern AlgoData* algoinfo[MAX_ALGOS];   // static info for each algorithm
extern algo_type initalgo;              // initial algorithm

// the following bitmaps are grayscale icons that can be used with any rules
// with any number of states

extern gBitmapPtr* circles7x7;          // circular icons for scale 1:8
extern gBitmapPtr* circles15x15;        // circular icons for scale 1:16
extern gBitmapPtr* circles31x31;        // circular icons for scale 1:32

extern gBitmapPtr* diamonds7x7;         // diamond icons for scale 1:8
extern gBitmapPtr* diamonds15x15;       // diamond icons for scale 1:16
extern gBitmapPtr* diamonds31x31;       // diamond icons for scale 1:32

extern gBitmapPtr* hexagons7x7;         // hexagonal icons for scale 1:8
extern gBitmapPtr* hexagons15x15;       // hexagonal icons for scale 1:16
extern gBitmapPtr* hexagons31x31;       // hexagonal icons for scale 1:32

// NOTE: the triangular icons are only suitable for a 4-state rule that
// is emulating a triangular neighborhood with 2 triangles per cell

extern gBitmapPtr* triangles7x7;        // triangular icons for scale 1:8
extern gBitmapPtr* triangles15x15;      // triangular icons for scale 1:16
extern gBitmapPtr* triangles31x31;      // triangular icons for scale 1:32

void InitAlgorithms();
// Initialize above data.  Must be called before reading the prefs file.

void DeleteAlgorithms();
// Deallocate memory allocated in InitAlgorithms().

lifealgo* CreateNewUniverse(algo_type algotype, bool allowcheck = true);
// Create a new universe of given type.  If allowcheck is true then
// event checking is allowed.

const char* GetAlgoName(algo_type algotype);
// Return name of given algorithm.  This name appears in various places
// and is also stored in the prefs file.

int NumAlgos();
// Return current number of algorithms.

gBitmapPtr* CreateIconBitmaps(const char** xpmdata, int maxstates);
// Create icon bitmaps using the given XPM data.

gBitmapPtr* ScaleIconBitmaps(gBitmapPtr* srcicons, int size);
// Return icon bitmaps scaled to given size.

void FreeIconBitmaps(gBitmapPtr* icons);
// Free all the memory used by the given set of icons.

bool MultiColorImage(gBitmapPtr image);
// Return true if image contains at least one color that isn't a shade of gray.

#endif