diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
commit | 22f703cab05b7cd368f4de9e03991b7664dc5022 (patch) | |
tree | 6f4d50beaa42328e24b1c6b56b6ec059e4ef21a5 /target/simdlat.h |
Initial import of argyll version 1.5.1-8debian/1.5.1-8
Diffstat (limited to 'target/simdlat.h')
-rw-r--r-- | target/simdlat.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/target/simdlat.h b/target/simdlat.h new file mode 100644 index 0000000..93e0ad3 --- /dev/null +++ b/target/simdlat.h @@ -0,0 +1,94 @@ + +#ifndef SIMDLAT_H +/* + * Argyll Color Correction System + * + * Simplex device space latice test point class + * + * Author: Graeme W. Gill + * Date: 30/8/2004 + * + * Copyright 2002 - 2004 Graeme W. Gill + * All rights reserved. + * + * This material is licenced under the GNU AFFERO GENERAL PUBLIC LICENSE Version 3 :- + * see the License.txt file for licencing details. + * + * Based on simplat.h + */ + +#define SPT_HASHSIZE 4463 /* Hash index size */ + +/* A sample point node */ +struct _sdtnode { + int vald; /* Valid flag */ + int x[MXTD]; /* Index */ + double p[MXTD]; /* Device coordinate position */ + double v[MXTD]; /* Subjective value (Labk) */ + int b; /* 1 if a gamut point, 2 if a boundary point */ + unsigned long expm[2]; /* -ve/+ve dimention explored flags */ + + int hp; /* Hash linked list index */ + int up; /* Unexplored linked list index */ +}; typedef struct _sdtnode sdtnode; + + +/* Main simplex latice object */ +struct _simdlat { +/* private: */ + int di; /* Point dimensionality */ + double ilimit; /* Ink limit - limit on sum of p[] */ + int inp; /* Intended number of points in list */ + int type; /* Type of point geometry, 0 = body centered etc. */ + double angle; /* Grid angle */ + double bo[MXTD]; /* Basis origin */ + double bv[MXTD][MXTD]; /* Simplex basis vectors */ + int np; /* Number of point nodes in list */ + int nvp; /* Number of valid point nodes in list */ + int np_a; /* Number of points allocated */ + double dia; /* Point spacing in latice */ + sdtnode *nodes; /* Current array of nodes */ + int bnp; /* Number of point nodes in best list */ + int bnvp; /* Number of best valid point nodes in list */ + int bnp_a; /* Number of best points allocated */ + double bdia; /* Point spacing in best latice */ + sdtnode *bnodes; /* Current best array of nodes */ + int hash[SPT_HASHSIZE]; /* Hash index */ + int unex; /* Head of unexplored list index */ + double tol; /* Snap tollerance */ + + /* Perceptual function */ + void (*percept)(void *od, double *out, double *in); + void *od; /* Opaque data for perceptual point */ + + /* Fixed points to avoid */ + fxpos *fxlist; /* List of existing fixed points (may be NULL) */ + int fxno; /* Number of existing fixes points */ + + int rix; /* Next read index */ + +/* public: */ + /* Initialise, ready to read out all the points */ + void (*reset)(struct _simdlat *s); + + /* Read the next set of non-fixed points values */ + /* return non-zero when no more points */ + int (*read)(struct _simdlat *s, double *d, double *p); + + /* Destroy ourselves */ + void (*del)(struct _simdlat *s); + + }; typedef struct _simdlat simdlat; + + /* geometry type */ +#define SIMDLAT_BCC 0 /* Body centered Cubic */ +#define SIMDLAT_EQSPLX 1 /* Equilateral Simplex */ +#define SIMDLAT_FCC 2 /* Face Centered Cubic */ + +/* Constructor */ +extern simdlat *new_simdlat(int di, double ilimit, int npoints, + fxpos *fxlist, int fxno, int type, double angle, + void (*percept)(void *od, double *out, double *in), void *od); + +#define SIMDLAT_H +#endif /* SIMDLAT_H */ |