[阅读: 616] 2005-07-07 09:49:34
#ifndef __ASCII_MINUTE_DATA_H__
#define __ASCII_MINUTE_DATA_H__
#include
#include "rawQuoteData.h"
/**
* AsciiMinuteData is such a kind of data stored as text file. It is created
* from DirectoryDataProvider.
*
* AsciiMinuteData can be minute data type or daily data type, depending on the
* format of data in file.
*
* The format of data file is defined inside AsciiMinuteData as enumeration types
*/
class AsciiMinuteData : public RawQuoteData {
enum DataLineFormat;
enum DateFormat;
/// Format of input data line
DataLineFormat _dataLineFormat;
/// Format of date
DateFormat _dateFormat;
/**
* InvalidDataLineException is raised when an invalid data line encountered in reading ascii
* data file
*/
class InvalidDataLineException : public std::exception {
public:
InvalidDataLineException(const char * msg) : std::exception(msg) {}
}; // class InvalidDataLineException
/**
* AsciiMinuteDataParser parses one line of data and set fields in
* AsciiQuoteData instance.
*/
class AsciiMinuteDataParser {
/// The Separator in fields
static const char * FIELD_SEPARATOR;
/// The date separator
static const char * DATE_SEPARATOR;
/// The time separator
static const char TIME_SEPARATOR_CHAR;
/// Format of input data line
DataLineFormat _dataLineFormat;
/// Format of date
DateFormat _dateFormat;
/**
* field_parser is a helper function object class for parsing fields in ascii data line
*/
struct field_parser {
DateFormat _dateFormat;
// Constructor
field_parser(DateFormat dateFormat)
{
_dateFormat = dateFormat;
}
// Parse string to date
void operator()(const std::string & s, boost::gregorian::date & d);
// Parse string to time
void operator()(const std::string & s, util::time_in_day & t);
// Parse string to double
void operator()(const std::string & s, double & d);
// Parse string to unsigned int
void operator()(const std::string & s, unsigned int & u);
// fix 2-digit day
void fixDay(unsigned short & day);
}; // struct field_parser
public:
/**
* Constructs a AsciiMinuteDataParser from data line format and date format
*/
AsciiMinuteDataParser(AsciiMinuteData::DataLineFormat dataLineFormat,
AsciiMinuteData::DateFormat dateFormat)
{
setFormat(dataLineFormat, dateFormat);
}
/**
* Default constructor
*/
AsciiMinuteDataParser() {}
/**
* Set format to parser
*/
void setFormat(AsciiMinuteData::DataLineFormat dataLineFormat,
AsciiMinuteData::DateFormat dateFormat)
{
_dataLineFormat = dataLineFormat;
_dateFormat = dateFormat;
} // setFormat
/**
* Parse one line of data and set QuoteData fields
*
* @param dataLine the date line
* @param item the parsed item
*/
DataType parseDataLine(std::string & dataLine, RawQuoteDataItem & item) throw(InvalidDataLineException);
private:
/**
* Parse tokenized string field to specified type data
*/
template
FieldType _parseField(boost::tokenizer< boost::char_separator >::iterator it,
boost::tokenizer< boost::char_separator >::iterator endIt,
FieldParser & fp)
throw(InvalidDataLineException);
}; // class AsciiMinuteDataParser
// A parser to parse data line
AsciiMinuteDataParser _dataParser;
/// Format type definition
public:
/**
* Ascii Data Line format definitions
*/
enum DataLineFormat {
Date_Open_High_Low_Close_Vol_OpenInt,
Date_Time_Open_High_Low_Close_Vol_OpenInt,
Date_High_Low_Close_Vol,
Date_Close,
Date_Open_High_Low_Close,
Date_Open_High_Low_Close_Vol
}; // enum DateLineFormat
/**
* Date format definitions
*/
enum DateFormat {
Month_Day_Year,
Day_Month_Year,
Year_Month_Day,
Month_Year_Day,
Day_Year_Month,
Year_Day_Month
}; // enum DateFormat
public:
/**
* Constructs an ASCII minute data from an istream instance, with special data line
* format and date format. AsciiMinuteData reads data lines from specified istream and
* creates all instances of RawQuoteData in memory. All error lines are ignored.
*
* @param is the istream
* @param dataLineFormat format of input data line. See definition of enum DataLineFormat
* @param dateFormat format of date. see definition of enum DateFormat
*/
AsciiMinuteData(std::istream & is, AsciiMinuteData::DataLineFormat dataLineFormat,
AsciiMinuteData::DateFormat dateFormat);
public:
/**
* Whether the field is available
*/
virtual bool isFieldAvailable(RawQuoteData::DataField field);
}; // class AsciiMinuteData
#endif // __ASCII_MINUTE_DATA_H__
若你在年轻时上过水木, 它会一生跟随着你, 如一场浮动的盛宴
禁色和禁果仍被保存吗?
这世界有否给潜移默化?
离过家回了家仍住中环吗?
-----信有带到新居里烧吗?
一切美好的都会消失
人要是没有理想, 跟咸鱼有什么两样?
“把人们引向艺术和科学的最强烈动机之一,是要逃避日常生活中令人厌恶的粗俗和使人绝望的沉闷,是要摆脱人们自己反复无常的欲望的桎梏。一个修养有素的人总是渴望逃避个人生活而进入客观直觉和思维的世界。”
不要忘了,这个世界穿透一切高墙的东西,它就在我们的内心深处,他们无法达到,也接触不到,那就是希望。(FROM《肖申克的救赎》)