39   memset(&data, 0, 
sizeof(data));
    42   if (para_tag_identifier == 
"STOCKINFO")
    43     data.security_type = data.OFX_STOCK_SECURITY;
    44   else if (para_tag_identifier == 
"MFINFO")
    45     data.security_type = data.OFX_FUND_SECURITY;
    46   else if (para_tag_identifier == 
"OPTINFO")
    47     data.security_type = data.OFX_OPTION_SECURITY;
    48   else if (para_tag_identifier == 
"DEBTINFO")
    49     data.security_type = data.OFX_DEBT_SECURITY;
    51     data.security_type = data.OFX_OTHER_SECURITY;
    52   data.security_type_valid = 
true;
    54 OfxSecurityContainer::~OfxSecurityContainer()
    59   if (identifier == 
"UNIQUEID")
    65     if (data.unique_id_valid == 
false)
    68       data.unique_id_valid = 
true;
    73       strncpy(data.unique_id2, value.c_str(), 
sizeof(data.unique_id2));
    74       data.unique_id2_valid = 
true;
    77   else if (identifier == 
"UNIQUEIDTYPE")
    83     if (data.unique_id_type_valid == 
false)
    86       data.unique_id_type_valid = 
true;
    91       strncpy(data.unique_id2_type, value.c_str(), 
sizeof(data.unique_id2_type));
    92       data.unique_id2_type_valid = 
true;
    95   else if (identifier == 
"SECNAME")
    97     strncpy(data.secname, value.c_str(), 
sizeof(data.secname));
    98     data.secname_valid = 
true;
   100   else if (identifier == 
"TICKER")
   102     strncpy(data.ticker, value.c_str(), 
sizeof(data.ticker));
   103     data.ticker_valid = 
true;
   105   else if (identifier == 
"RATING")
   107     strncpy(data.rating, value.c_str(), OFX_SECURITY_RATING_LENGTH);
   108     data.rating_valid = 
true;
   110   else if (identifier == 
"UNITPRICE")
   113     data.unitprice_valid = 
true;
   115   else if (identifier == 
"DTASOF")
   118     data.date_unitprice_valid = 
true;
   120   else if (identifier == 
"CURRATE")
   123     data.currency_ratio_valid = 
true;
   125   else if (identifier == 
"CURSYM")
   127     strncpy(data.
currency, value.c_str(), OFX_CURRENCY_LENGTH);
   128     data.currency_valid = 
true;
   130   else if (identifier == 
"CURRENCY")
   133     data.amounts_are_foreign_currency_valid = 
true;
   135   else if (identifier == 
"ORIGCURRENCY")
   138     data.amounts_are_foreign_currency_valid = 
true;
   140   else if (identifier == 
"MEMO" || identifier == 
"MEMO2")
   142     strncpy(data.
memo, value.c_str(), 
sizeof(data.
memo));
   143     data.memo_valid = 
true;
   145   else if (identifier == 
"FIID")
   147     strncpy(data.fiid, value.c_str(), OFX_FIID_LENGTH);
   148     data.fiid_valid = 
true;
   150   else if (identifier == 
"ASSETCLASS")
   152     if (value == 
"DOMESTICBOND")
   154       data.asset_class = data.OFX_ASSET_CLASS_DOMESTICBOND;
   155       data.asset_class_valid = 
true;
   157     else if (value == 
"INTLBOND")
   159       data.asset_class = data.OFX_ASSET_CLASS_INTLBOND;
   160       data.asset_class_valid = 
true;
   162     else if (value == 
"LARGESTOCK")
   164       data.asset_class = data.OFX_ASSET_CLASS_LARGESTOCK;
   165       data.asset_class_valid = 
true;
   167     else if (value == 
"SMALLSTOCK")
   169       data.asset_class = data.OFX_ASSET_CLASS_SMALLSTOCK;
   170       data.asset_class_valid = 
true;
   172     else if (value == 
"INTLSTOCK")
   174       data.asset_class = data.OFX_ASSET_CLASS_INTLSTOCK;
   175       data.asset_class_valid = 
true;
   177     else if (value == 
"MONEYMRKT")
   179       data.asset_class = data.OFX_ASSET_CLASS_MONEYMRKT;
   180       data.asset_class_valid = 
true;
   182     else if (value == 
"OTHER")
   184       data.asset_class = data.OFX_ASSET_CLASS_OTHER;
   185       data.asset_class_valid = 
true;
   188   else if (identifier == 
"PARVALUE")
   191     data.par_value_valid = 
true;
   193   else if (identifier == 
"DEBTTYPE")
   195     if (value == 
"COUPON")
   197       data.debt_type = data.OFX_DEBT_TYPE_COUPON;
   198       data.debt_type_valid = 
true;
   200     else if (value == 
"ZERO")
   202       data.debt_type = data.OFX_DEBT_TYPE_ZERO;
   203       data.debt_type_valid = 
true;
   206   else if (identifier == 
"DEBTCLASS")
   208     if (value == 
"TREASURY")
   210       data.debt_class = data.OFX_DEBTCLASS_TREASURY;
   211       data.debt_class_valid = 
true;
   213     else if (value == 
"MUNICIPAL")
   215       data.debt_class = data.OFX_DEBTCLASS_MUNICIPAL;
   216       data.debt_class_valid = 
true;
   218     else if (value == 
"CORPORATE")
   220       data.debt_class = data.OFX_DEBTCLASS_CORPORATE;
   221       data.debt_class_valid = 
true;
   223     else if (value == 
"OTHER")
   225       data.debt_class = data.OFX_DEBTCLASS_OTHER;
   226       data.debt_class_valid = 
true;
   229   else if (identifier == 
"COUPONRT")
   232     data.coupon_rate_valid = 
true;
   234   else if (identifier == 
"DTCOUPON")
   237     data.date_coupon_valid = 
true;
   239   else if (identifier == 
"COUPONFREQ")
   241     if (value == 
"MONTHLY")
   243       data.coupon_freq = data.OFX_COUPON_FREQ_MONTHLY;
   244       data.coupon_freq_valid = 
true;
   246     else if (value == 
"QUARTERLY")
   248       data.coupon_freq = data.OFX_COUPON_FREQ_QUARTERLY;
   249       data.coupon_freq_valid = 
true;
   251     else if (value == 
"SEMIANNUAL")
   253       data.coupon_freq = data.OFX_COUPON_FREQ_SEMIANNUAL;
   254       data.coupon_freq_valid = 
true;
   256     else if (value == 
"ANNUAL")
   258       data.coupon_freq = data.OFX_COUPON_FREQ_ANNUAL;
   259       data.coupon_freq_valid = 
true;
   261     else if (value == 
"OTHER")
   263       data.coupon_freq = data.OFX_COUPON_FREQ_OTHER;
   264       data.coupon_freq_valid = 
true;
   267   else if (identifier == 
"CALLPRICE")
   270     data.call_price_valid = 
true;
   272   else if (identifier == 
"YIELDTOCALL")
   275     data.yield_to_call_valid = 
true;
   277   else if (identifier == 
"DTCALL")
   280     data.call_date_valid = 
true;
   282   else if (identifier == 
"CALLTYPE")
   286       data.call_type = data.OFX_CALL_TYPE_CALL;
   287       data.call_type_valid = 
true;
   289     else if (value == 
"PUT")
   291       data.call_type = data.OFX_CALL_TYPE_PUT;
   292       data.call_type_valid = 
true;
   294     else if (value == 
"PREFUND")
   296       data.call_type = data.OFX_CALL_TYPE_PREFUND;
   297       data.call_type_valid = 
true;
   299     else if (value == 
"MATURITY")
   301       data.call_type = data.OFX_CALL_TYPE_MATURITY;
   302       data.call_type_valid = 
true;
   305   else if (identifier == 
"YIELDTOMAT")
   308     data.yield_to_maturity_valid = 
true;
   310   else if (identifier == 
"DTMAT")
   313     data.maturity_date_valid = 
true;
   315   else if (identifier == 
"MFTYPE")
   317     if (value == 
"OPENEND")
   319       data.mutual_fund_type = data.OFX_MFTYPE_OPENEND;
   320       data.mutual_fund_type_valid = 
true;
   322     else if (value == 
"CLOSEEND")
   324       data.mutual_fund_type = data.OFX_MFTYPE_CLOSEEND;
   325       data.mutual_fund_type_valid = 
true;
   327     else if (value == 
"OTHER")
   329       data.mutual_fund_type = data.OFX_MFTYPE_OTHER;
   330       data.mutual_fund_type_valid = 
true;
   333   else if (identifier == 
"STOCKTYPE")
   335     if (value == 
"COMMON")
   337       data.stock_type = data.OFX_STOCKTYPE_COMMON;
   338       data.stock_type_valid = 
true;
   340     else if (value == 
"PREFERRED")
   342       data.stock_type = data.OFX_STOCKTYPE_PREFERRED;
   343       data.stock_type_valid = 
true;
   345     else if (value == 
"CONVERTIBLE")
   347       data.stock_type = data.OFX_STOCKTYPE_CONVERTIBLE;
   348       data.stock_type_valid = 
true;
   350     else if (value == 
"OTHER")
   352       data.stock_type = data.OFX_STOCKTYPE_OTHER;
   353       data.stock_type_valid = 
true;
   356   else if (identifier == 
"YIELD")
   359     data.yield_valid = 
true;
   361   else if (identifier == 
"DTYIELDASOF")
   364     data.yield_asof_date_valid = 
true;
   366   else if (identifier == 
"OPTTYPE")
   368     if (value == 
"CALL" || value == 
"Call")
   370       data.option_type = data.OFX_OPTION_TYPE_CALL;
   371       data.option_type_valid = 
true;
   373     else if (value == 
"PUT" || value == 
"Put")
   375       data.option_type = data.OFX_OPTION_TYPE_PUT;
   376       data.option_type_valid = 
true;
   379   else if (identifier == 
"STRIKEPRICE")
   382     data.strike_price_valid = 
true;
   384   else if (identifier == 
"DTEXPIRE")
   387     data.date_expire_valid = 
true;
   389   else if (identifier == 
"SHPERCTRCT")
   392     data.shares_per_cont_valid = 
true;
   402   libofx_context->securityCallback(data);
   408   if (MainContainer != NULL)
   410     return MainContainer->add_container(
this);
 double ofxamount_to_double(const string ofxamount)
Convert OFX amount of money to double float. 
char currency[OFX_CURRENCY_LENGTH]
char unique_id_type[OFX_UNIQUE_ID_TYPE_LENGTH]
A generic container for an OFX SGML element. Every container inherits from OfxGenericContainer. 
int amounts_are_foreign_currency
Various simple functions for type conversion & al. 
LibOFX internal object code. 
virtual void add_attribute(const string identifier, const string value)
Add data to a container object. 
virtual int add_to_main_tree()
Add this container to the main tree. 
virtual int gen_event()
Generate libofx.h events. 
time_t ofxdate_to_time_t(const string ofxdate)
Convert a C++ string containing a time in OFX format to a C time_t. 
char unique_id[OFX_UNIQUE_ID_LENGTH]
void add_attribute(const string identifier, const string value)
Add data to a container object. 
char memo[OFX_MEMO_LENGTH]
Message IO functionality. 
The root container. Created by the <OFX> OFX element or by the export functions.