Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

story.h

Go to the documentation of this file.
00001 #ifndef  STARLAB_STORY_H
00002 #  define  STARLAB_STORY_H
00003 
00005 
00006 #include  "starlab_vector.h"
00007 
00008 //----------------------------------------------------------------------
00009 //
00010 // Define strings to start and end various story elements.
00011 
00012 #if 1
00013 
00014 // Old version:
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 // New short (too short?) version:
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 // Note that old and new versions are *not* compatible (Steve, 10/00).
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;   // 0: this story is a line text
00080                              // 1: this story is a chapter
00081 
00082     public:
00083 
00085 
00088 
00089         story(int flag = 0)  // default: a bare story, to hold a text line only
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);               // Note that a_string
00138                                                   // isn't deleted here.
00139             }
00140 
00141 //      friend istream& operator>>(istream & , story * & );
00142 //        friend ostream& operator<<(ostream & , story * );
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  

Generated on Wed Jul 20 12:43:37 2005 for Starlab by  doxygen 1.4.3