/* 
 * Author: Jeff Thompson
 *
 * BSD license, See the LICENSE file for more information.
 */

#ifndef NDN_BINARYXMLENCODER_HPP
#define	NDN_BINARYXMLENCODER_HPP

#include <cstdlib>
#include <stdexcept>
#include "../c/encoding/BinaryXMLEncoder.h"

namespace ndn {
  
/**
 * A BinaryXMLEncoder wraps a C ndn_BinaryXMLEncoder struct and related functions.
 */
class BinaryXMLEncoder {
public:
  /**
   * Initialize the base ndn_BinaryXMLEncoder struct with an initial array of 16 bytes.  Use simpleRealloc.
   */
  BinaryXMLEncoder() 
  {
    const unsigned int initialLength = 16;
    ndn_BinaryXMLEncoder_init(&base_, (unsigned char *)malloc(initialLength), initialLength, simpleRealloc);
  }
  
  /**
   * Wrap the C stdlib realloc to convert to/from void * to unsigned char *.
   * @param array the allocated array buffer to realloc
   * @param length the length for the new array buffer
   * @return the new allocated array buffer
   */
  static unsigned char *simpleRealloc(unsigned char *array, unsigned int length)
  {
    return (unsigned char *)realloc(array, length);
  }
  
  /**
   * Return a pointer to the base ndn_BinaryXMLEncoder struct.
   * @return 
   */
  struct ndn_BinaryXMLEncoder *getEncoder() { return &base_; }
  
private:
  struct ndn_BinaryXMLEncoder base_;
};

}

#endif
