00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00029 #ifndef _ALIAS_H_
00030 #define _ALIAS_H_
00031
00032 #include <vector>
00033 #include <string>
00034 #include <fstream>
00035 #include <cmath>
00036
00038 using namespace std;
00039
00040 #include "hbf.h"
00041
00043 const double EPS = 1e-12;
00044
00046 typedef vector<int>::iterator iteri;
00048 typedef vector<double>::iterator iterd;
00049
00051 typedef double Threshold;
00053 typedef int Index;
00054
00055
00061 class Alias{
00062 private:
00066 struct AliasStruct{
00068 Threshold t;
00070 Index col;
00072 Index alias;
00073 };
00074
00076 typedef struct AliasStruct stock;
00078 vector<stock> S;
00079
00080
00081 public:
00082
00083 int size() const;
00084 double threshold(const int i) const;
00085 int col(const int i) const;
00086 int alias(const int i) const;
00087 void init(const int d);
00088 void mk_walker(const int d);
00089 void transpose(const int d);
00090 int read(const string path);
00091 void write_construct(const string file_name,const int d);
00092 int walk(const double rand,const int j,const int n,const int d,const int i);
00093 };
00094
00095
00096
00097 #include "alias.inl"
00098
00099
00100 #endif
00101