Path: blob/master/src/sage/geometry/triangulation/data.h
8817 views
#ifndef __DATA_H__1#define __DATA_H__23#include <cstdlib>4#include <time.h>5#include <iostream>6#include <set>7#include <functional>8#include <vector>91011// may be insufficient if you have 16 bit int's12typedef unsigned int hash_value;13141516// typedef unsigned long int simplex;17typedef int vertex;18typedef int simplex;1920class flip;21class flips;22class vertices_lookup;232425// a set of vertices; usually vertices of a simplex26class vertices: public std::set<vertex,std::less<vertex> >27{28private:29static int n;30static int d;31static vertices_lookup lookup;32protected:33public:34vertices();35vertices(const simplex&);36const simplex vertices_to_simplex() const;37const vertices & simplex_to_vertices(const simplex &); // uses lookup-table38void set_dimensions(int N, int D);39friend std::ostream & operator << (std::ostream &, const vertices &);40friend bool operator==(const vertices &, const vertices &);41bool full_set() const { return this->size() == n; }42};4344// tables used by vertices to make computation faster45class vertices_lookup46{47private:48int n,d;49std::vector<vertices> SimplexToVertices;50std::vector<std::vector<int> > fast_binomial;51protected:52vertices manual_vertices_to_simplex(const simplex &) const;53public:54void generate_tables(int N, int D);55const vertices & simplex_to_vertices(const simplex &) const;56int get_binomial(int i, int j) const;57};585960// total order on the vertices61struct vertices_order62{63bool operator() (const vertices &, const vertices &) const;64};656667// simplical complex, data compressed by vertices_to_simplex68class compact_simplices: public std::vector<simplex>69{70private:71protected:72public:73compact_simplices();74virtual ~compact_simplices();75hash_value hash_function() const;76friend std::ostream & operator <<77(std::ostream &, const compact_simplices &);78friend const bool operator==79(const compact_simplices &, const compact_simplices &);80};8182// same but with complete vertex information83class simplices: public compact_simplices84{85private:86std::vector<vertices> v;87protected:88void compress();89void decompress();90public:91simplices() { };92simplices(const std::set<vertices,vertices_order> &);93simplices(const compact_simplices &);94bool starshaped(const vertex) const;95bool fine() const;96virtual ~simplices();97const std::vector<vertices> & get_vertices() const { return(v); }98friend std::ostream & operator << (std::ostream & out, const simplices & s);99};100101class flip102{103private:104std::vector<vertices> deltaplus, deltaminus;105protected:106public:107flip();108flip(const std::vector<vertices>& pos, const std::vector<vertices>& neg);109flip(const flip &);110virtual ~flip();111flip & operator =(const flip &);112friend std::ostream & operator <<(std::ostream &, const flip &);113const std::vector<vertices> & get_deltaplus() const { return deltaplus; };114const std::vector<vertices> & get_deltaminus() const { return deltaminus;};115void mirror();116};117118class flips: public std::vector<flip>119{120protected:121void sort_flips_containing();122public:123flips();124virtual ~flips();125};126127128class goodcircuit129{130private:131std::vector<std::vector<vertices> > supported;132flip supporter;133std::vector<std::set<vertices,vertices_order> > link;134std::set<vertices,vertices_order> bistellarneighbor;135bool good;136public:137goodcircuit(const simplices &, const flip &);138bool is_good() const { return(good); }139void do_flip(const simplices &, const flip &);140simplices get_neighbor() const { return(bistellarneighbor); }141};142143144145146#endif147148149