#include "sierrachart.h"

SCDLLName("ParseLineItemsAsFloats Bug Demo")

SCSFExport scsf_ParseLineItemsAsFloatsBugDemo(SCStudyInterfaceRef sc)
{	
	SCString msg; // for message log output
	SCString datastring; // for demonstration data
	std::vector<SCString> Lines; // holds demo data parsed into lines
	std::vector<float> FloatVals; // holds demo data lines parsed into floats
	std::vector<char*> Tokens; // holds demo data lines parsed into tokens
	
	if (sc.Index == 0) {
		
		// Generate demonstration data
		datastring.Format("0.1,0.2,0.3,0.4,0.5\n1.1,1.2,1.3,1.4,1.5,1.6\n2.1,2.2,2.3\n");
		
		// Parse the demonstration data into a vector of SCStrings
		datastring.ParseLines(Lines);
		
		// Loop through the parsed lines and parse each line into floats
		for (int i = 0; i < Lines.size(); i++) {
			
			// Output current line of demonstration data to message log
			msg.Format("Lines[%d] as string: %s", i, Lines[i].GetChars());
			sc.AddMessageToLog(msg,0);
			
			// Parse current line into a vector of floats
			Lines[i].ParseLineItemsAsFloats(FloatVals);
			
			// Generate message log output preface for FloatVals
			msg.Format("FloatVals vector (FloatVals.size(): %d): ", FloatVals.size());
			
			// Add each float to the message log output
			for (int i = 0; i <= FloatVals.size(); i++) { // Note <= operator for loop end condition
				msg.AppendFormat("%.1f", FloatVals[i]);
				if (i < FloatVals.size()) msg.AppendFormat(", ");
			}
			
			FloatVals.clear(); // Note how ParseLineItemsAsFloats requires this line while Tokenize does not
			
			// Output current line of floats to message log
			sc.AddMessageToLog(msg,0);
			
			
			// Parse current line into a vector of tokens
			Lines[i].Tokenize(",", Tokens);
			
			// Generate message log output preface for Tokens
			msg.Format("Tokens vector (Tokens.size(): %d): ", Tokens.size());
			
			for (int i = 0; i < Tokens.size(); i++) {
				msg.AppendFormat("%s", SCString(Tokens[i]).GetChars());
				if (i < Tokens.size()-1) msg.AppendFormat(", ");
			}
			
			// Output current line of tokens to message log
			sc.AddMessageToLog(msg,0);
		}
		
	}
}
