#ifndef _FIXEDFIELDSTRINGMESSAGE_H
#define _FIXEDFIELDSTRINGMESSAGE_H

#include "StringMessage.h"
#include "DynamicArray.h"

/*
CLASS 
FixedFieldStringMessage

DESCRIPTION
Character string containing ascii representation of primitive data types.
Each field is of fixed, specified width


AUTHOR
Tom O'Reilly
*/
class FixedFieldStringMessage : public StringMessage {

public:
  
  FixedFieldStringMessage(int maxStringBytes, char padChar);
  virtual ~FixedFieldStringMessage();

  ///////////////////////////////////////////////////////////////////
  // Specify field width
  void addField(int fieldWidth);

  ///////////////////////////////////////////////////////////////////
  // Move pointer to beginning of buffer
  virtual void reset();

protected:

  ///////////////////////////////////////////////////////////////////
  // Return pointer to next token in buffer
  virtual char *nextToken();

  ///////////////////////////////////////////////////////////////////
  // Append new token
  virtual void addToken(const char *newToken);

  ///////////////////////////////////////////////////////////////////
  // Pad current field with specified character
  void padField();

  ///////////////////////////////////////////////////////////////////
  // Move buffer pointer to next field, set widths, etc.
  void advanceField();

  // Array of field widths
  DynamicArray<int > _fieldWidths;

  // Current field index
  int _field;

  // Current field width
  int _fieldWidth;

  char _padChar;
};


#endif

