diff -r 9374fea8f77f -r f1b8cb53d2a2 types.h
--- a/types.h Wed May 08 14:57:48 2013 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,222 +0,0 @@
-/*
- * LDForge: LDraw parts authoring CAD
- * Copyright (C) 2013 Santeri Piippo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#ifndef TYPES_H
-#define TYPES_H
-
-#include "common.h"
-#include "misc.h"
-
-typedef unsigned int uint;
-typedef short unsigned int ushort;
-typedef long unsigned int ulong;
-
-// Typedef out the _t suffices :)
-typedef int8_t int8;
-typedef int16_t int16;
-typedef int32_t int32;
-typedef int64_t int64;
-typedef uint8_t uint8;
-typedef uint16_t uint16;
-typedef uint32_t uint32;
-typedef uint64_t uint64;
-
-template using initlist = std::initializer_list;
-using std::vector;
-
-enum Axis { X, Y, Z };
-static const Axis g_Axes[3] = {X, Y, Z};
-
-// =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
-// matrix
-//
-// A templated, mathematical N x N matrix
-// =============================================================================
-template class matrix {
-public:
- // Constructors
- matrix () {}
- matrix (initlist vals) {
- assert (vals.size() == N * N);
- memcpy (&m_vals[0], &(*vals.begin ()), sizeof m_vals);
- }
-
- matrix (double fillval) {
- for (short i = 0; i < (N * N); ++i)
- m_vals[i] = fillval;
- }
-
- matrix (double vals[]) {
- for (short i = 0; i < (N * N); ++i)
- m_vals[i] = vals[i];
- }
-
- template matrix (matrix other) {
- assert (M >= N);
-
- for (short i = 0; i < M; ++i)
- for (short j = 0; j < M; ++j) {
- const short idx = (i * M) + j;
- m_vals[idx] = other[idx];
- }
- }
-
- matrix mult (matrix other) {
- matrix val;
- val.zero ();
-
- for (short i = 0; i < N; ++i)
- for (short j = 0; j < N; ++j)
- for (short k = 0; k < N; ++k)
- val[(i * N) + j] += m_vals[(i * N) + k] * other[(k * N) + j];
-
- return val;
- }
-
- matrix& operator= (matrix other) {
- memcpy (&m_vals[0], &other.m_vals[0], sizeof (double) * N * N);
- return *this;
- }
-
- matrix operator* (matrix other) {
- return mult (other);
- }
-
- double& operator[] (const uint idx) {
- return m_vals[idx];
- }
-
- const double& operator[] (const uint idx) const {
- return m_vals[idx];
- }
-
- void zero () {
- memset (&m_vals[0], 0, sizeof (double) * N * N);
- }
-
- void puts () const {
- for (short i = 0; i < N; ++i) {
- for (short j = 0; j < N; ++j)
- printf ("%*f\t", 10, m_vals[(i * N) + j]);
-
- printf ("\n");
- }
- }
-
- str stringRep () const {
- str val;
- for (short i = 0; i < N * N; ++i) {
- if (i > 0)
- val += ' ';
-
- val.appendformat ("%s", ftoa (m_vals[i]).chars());
- }
-
- return val;
- }
-
-private:
- double m_vals[N * N];
-};
-
-// =============================================================================
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-// =============================================================================
-// vertex
-//
-// Vertex class, contains a single point in 3D space. Not to be confused with
-// LDVertex, which is a vertex used in an LDraw part file.
-// =============================================================================
-class vertex {
-public:
- double m_coords[3];
-
- vertex () {}
- vertex (double x, double y, double z) {
- m_coords[X] = x;
- m_coords[Y] = y;
- m_coords[Z] = z;
- }
-
- void move (vertex other) {
- for (const Axis ax : g_Axes)
- m_coords[ax] += other[ax];
- }
-
- vertex& operator+= (vertex other) {
- move (other);
- return *this;
- }
-
- vertex operator/ (const double d) const {
- vertex other (*this);
- return other /= d;
- }
-
- vertex& operator/= (const double d) {
- for (const Axis ax : g_Axes)
- m_coords[ax] /= d;
- return *this;
- }
-
- bool operator== (const vertex& other) const {
- return coord (X) == other[X] &&
- coord (Y) == other[Y] &&
- coord (Z) == other[Z];
- }
-
- bool operator!= (const vertex& other) const {
- return !operator== (other);
- }
-
- vertex operator- () const {
- return vertex (-m_coords[X], -m_coords[Y], -m_coords[Z]);
- }
-
- double& coord (const ushort n) {
- return m_coords[n];
- }
-
- const double& coord (const ushort n) const {
- return m_coords[n];
- }
-
- double& operator[] (const Axis ax) {
- return coord ((ushort) ax);
- }
-
- const double& operator[] (const Axis ax) const {
- return coord ((ushort) ax);
- }
-
- double& x () { return m_coords[X]; }
- double& y () { return m_coords[Y]; }
- double& z () { return m_coords[Z]; }
- const double& x () const { return m_coords[X]; }
- const double& y () const { return m_coords[Y]; }
- const double& z () const { return m_coords[Z]; }
-
- vertex midpoint (vertex& other);
- str stringRep (const bool mangled);
- void transform (matrix<3> matr, vertex pos);
- void transform (matrix<4> matr);
-};
-
-#endif // TYPES_H
\ No newline at end of file