00001 #ifndef STARLAB_STORY_H
00002 # define STARLAB_STORY_H
00003
00005
00006 #include "starlab_vector.h"
00007
00008
00009
00010
00011
00012 #if 1
00013
00014
00015
00016 #define PARTICLE_ID "Particle"
00017 #define START_PARTICLE "(Particle"
00018 #define END_PARTICLE ")Particle"
00019
00020 #define DYNAMICS_ID "Dynamics"
00021 #define START_DYNAMICS "(Dynamics"
00022 #define END_DYNAMICS ")Dynamics"
00023
00024 #define LOG_ID "Log"
00025 #define START_LOG "(Log"
00026 #define END_LOG ")Log"
00027
00028 #define HYDRO_ID "Hydro"
00029 #define START_HYDRO "(Hydro"
00030 #define END_HYDRO ")Hydro"
00031
00032 #define STAR_ID "Star"
00033 #define START_STAR "(Star"
00034 #define END_STAR ")Star"
00035
00036 #else
00037
00038
00039
00040 #define PARTICLE_ID "P"
00041 #define START_PARTICLE "(P"
00042 #define END_PARTICLE ")P"
00043
00044 #define DYNAMICS_ID "D"
00045 #define START_DYNAMICS "(D"
00046 #define END_DYNAMICS ")D"
00047
00048 #define LOG_ID "L"
00049 #define START_LOG "(L"
00050 #define END_LOG ")L"
00051
00052 #define HYDRO_ID "H"
00053 #define START_HYDRO "(H"
00054 #define END_HYDRO ")H"
00055
00056 #define STAR_ID "S"
00057 #define START_STAR "(S"
00058 #define END_STAR ")S"
00059
00060 #endif
00061
00062
00063
00064
00065
00066 #define MAX_STORY_LINE_LENGTH 255
00067 #define chapter_begin_char '('
00068 #define chapter_end_char ')'
00069
00071 class story
00072 {
00073 private:
00074
00075 story* next_story_node;
00076 story* first_daughter_node;
00077 story* last_daughter_node;
00078 char* text;
00079 int chapter_flag;
00080
00081
00082 public:
00083
00085
00088
00089 story(int flag = 0)
00090 {
00091 next_story_node = first_daughter_node = last_daughter_node = NULL;
00092 text = NULL;
00093 chapter_flag = flag;
00094 }
00095
00096 ~story();
00097
00099
00100 story * get_next_story_node() {return next_story_node;}
00101
00103
00104 story * get_first_daughter_node() {return first_daughter_node;}
00105
00107
00108 story * get_last_daughter_node() {return last_daughter_node;}
00109
00111
00112 char * get_text() {return text;}
00113
00115
00116 int get_chapter_flag() {return chapter_flag;}
00117
00119
00120 void set_next_story_node(story * s) {next_story_node = s;}
00121
00123
00124 void set_first_daughter_node(story * s) {first_daughter_node = s;}
00125
00127
00128 void set_last_daughter_node(story * s) {last_daughter_node = s;}
00129
00131
00132 void set_text(char * a_string)
00133 {
00134 if(text != NULL)
00135 delete [] text;
00136 text = new char[strlen(a_string)+1];
00137 strcpy(text, a_string);
00138
00139 }
00140
00141
00142
00143 };
00144
00145 story* mk_story_line();
00146 story* mk_story_line(char *);
00147 story* mk_story_chapter();
00148 story* mk_story_chapter(char *);
00149
00150 story* get_story(istream &);
00151 story* get_story(istream &, char *);
00152 void put_story(ostream &, story &);
00153 void put_story_contents(ostream &, story &, char *prefix = NULL);
00154 void put_simple_story_contents(ostream& str, story& s, char *prefix = NULL);
00155 void put_simple_story_contents(FILE *fp, story& s, char *prefix = NULL);
00156 void add_story_line(story *, char *);
00157 void rm_daughter_story(story * s, story * d);
00158
00159 story * find_qmatch(story *, char *);
00160 int rmq(story *, char *);
00161
00162 int getiq(story *, char *, bool verbose=false);
00163 unsigned long getulq(story *, char *, bool verbose=false);
00164 real getrq(story *, char *, bool verbose=false);
00165 char *getsq(story *, char *, bool verbose=false);
00166 vec getvq(story *, char *, bool verbose=false);
00167 void getra(story *, char *, real *, int, bool verbose=false);
00168 void getia(story *, char *, int *, int, bool verbose=false);
00169 void getia(story *, char *, unsigned long *, int, bool verbose=false);
00170
00171 void putiq(story *, char *, int);
00172 void putulq(story *, char *, unsigned long);
00173 void putrq(story *, char *, real, int precision = STD_PRECISION);
00174 void putra(story *, char *, real *, int);
00175 void putia(story *, char *, int *, int);
00176 void putia(story *, char *, unsigned long *, int);
00177 void putsq(story *, char *, char *);
00178 void putvq(story *, char *, vec &, int precision = STD_PRECISION);
00179
00180 void dump_story(story* s, int indent = 0);
00181
00182 #endif
00183