summaryrefslogtreecommitdiff
path: root/target/simdlat.h
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2014-09-01 13:56:46 +0200
committerJörg Frings-Fürst <debian@jff-webhosting.net>2014-09-01 13:56:46 +0200
commit22f703cab05b7cd368f4de9e03991b7664dc5022 (patch)
tree6f4d50beaa42328e24b1c6b56b6ec059e4ef21a5 /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.h94
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 */