S
SpOiLeR
I have 4 different text file formats which basically
Well, If someone is still interested, this is what I did. Coments are
welcome...
Before, I've had something like this:
class ParsedData
{
public:
ParsedData (const FileInfo& f_in);
// FileInfo is declared elsewhere and contains some data about
// file to be parsed...
~ParsedData ();
/* Set/Acess interface to data members */
private:
/* Few data members */
FileInfo fi;
void parser1 ();
void parser_helper11 ();
void parser_helper12 ();
void parser_helper13 ();
// ... Another 3 parsers similary declared
};
ParsedData:arsedData (const FileInfo& fi_in) : fi(fi_in)
{
if (condition1) parser1();
else if (condition2) parser2();
else if (condition3) parser3();
else parser4 ();
}
Now I have this:
class ParsedData {
public:
ParsedData (const FileInfo& f_in);
~ParsedData
/* Set/Acess interface to data members */
private:
/* Few data members */
FileInfo fi;
};
ParsedData:arsedData (const FileInfo& fi_in) : fi(fi_in), ...
// Initialization of all ParsedData members
{
if (cond1) parser1 par(this);
else if (cond2) parser2 par(this);
else if (cond3) parser3 par(this);
else parser4 par(this);
par.read();
}
class BasicParser // Comon interace to all parsers
{
public:
BasicParser (ParsedData *rv) : p(rv) {}
virtual ~BasicParser ();
int read ();
int write ();
private:
ParsedData *p;
};
clas ParserOne : public BasicParser
{
...
Each ParserX recieves pointer to ParsedData object and imediatelly parses
file into it. Info about path/file is included in ParsedData object...
Also, all parsers are in subnamespace of ParsedData namespace. I achieved
clearing up of ParsedData interface which was primarily my goal.
contain same data differently formated. I have class ParsedData which
handles data from this files. I also have 4 parses which can read from
files into ParsedData. Parsers should never be called explicitly (they
should only be called from ParsedData ctor). What is the best way to
protect those parsers?
Well, If someone is still interested, this is what I did. Coments are
welcome...
Before, I've had something like this:
class ParsedData
{
public:
ParsedData (const FileInfo& f_in);
// FileInfo is declared elsewhere and contains some data about
// file to be parsed...
~ParsedData ();
/* Set/Acess interface to data members */
private:
/* Few data members */
FileInfo fi;
void parser1 ();
void parser_helper11 ();
void parser_helper12 ();
void parser_helper13 ();
// ... Another 3 parsers similary declared
};
ParsedData:arsedData (const FileInfo& fi_in) : fi(fi_in)
{
if (condition1) parser1();
else if (condition2) parser2();
else if (condition3) parser3();
else parser4 ();
}
Now I have this:
class ParsedData {
public:
ParsedData (const FileInfo& f_in);
~ParsedData
/* Set/Acess interface to data members */
private:
/* Few data members */
FileInfo fi;
};
ParsedData:arsedData (const FileInfo& fi_in) : fi(fi_in), ...
// Initialization of all ParsedData members
{
if (cond1) parser1 par(this);
else if (cond2) parser2 par(this);
else if (cond3) parser3 par(this);
else parser4 par(this);
par.read();
}
class BasicParser // Comon interace to all parsers
{
public:
BasicParser (ParsedData *rv) : p(rv) {}
virtual ~BasicParser ();
int read ();
int write ();
private:
ParsedData *p;
};
clas ParserOne : public BasicParser
{
...
Each ParserX recieves pointer to ParsedData object and imediatelly parses
file into it. Info about path/file is included in ParsedData object...
Also, all parsers are in subnamespace of ParsedData namespace. I achieved
clearing up of ParsedData interface which was primarily my goal.