#include "node.h"


//****************************************************************************
//
// Function:   Node
//
// Purpose:    default c-tor
//
// Parameters: none
//
// Calls:      none
//
// Time Comp:  O(1)
//
// Space Com:  O(1)
//
//****************************************************************************


Node::Node()
{
   for(size_t i(0); i < 9; ++i)
   {
      data[i] = 0;
   }
   weight = 0;
   left = NULL;
   right = NULL;
}


//****************************************************************************
//
// Function:   Node
//
// Purpose:    creates node with given elements as data
//
// Parameters: {a, b, ... , i} - data from file
//
// Calls:      none
//
// Time Comp:  O(1)
//
// Space Com:  O(1)
//
//****************************************************************************


Node::Node(char a, char b, char c, char d, char e, char f, char g, char h, char i)
{
   data[0] = a - 48;
   data[1] = b - 48;
   data[2] = c - 48;
   data[3] = d - 48;
   data[4] = e - 48;
   data[5] = f - 48;
   data[6] = g - 48;
   data[7] = h - 48;
   data[8] = i - 48;

   left = NULL;
   right = NULL;
   weight = 1;
}


//****************************************************************************
//
// Function:   at_right
//
// Purpose:    returns right pointer
//
// Parameters: none
//
// Calls:      none
//
// Time Comp:  O(1)
//
// Space Com:  O(1)
//
//****************************************************************************


Node* Node::at_right()
{
   return right;
}


//****************************************************************************
//
// Function:   at_left
//
// Purpose:    returns left pointer
//
// Parameters: none
//
// Calls:      none
//
// Time Comp:  O(1)
//
// Space Com:  O(1)
//
//****************************************************************************


Node* Node::at_left()
{
   return left;
}


//****************************************************************************
//
// Function:   set_code
//
// Purpose:    takes input and sets it as the code for that data
//
// Parameters: sz - size of code
//             in - code for certain data
//
// Calls:      new
//
// Time Comp:  O(size of code)
//
// Space Com:  O(1)
//
//****************************************************************************


void Node::set_code(size_t sz, char in[])
{
   code = new char[sz];
   code_size = sz;
   for(size_t i(0); i < sz; ++i)
   {
      code[i] = in[i];
   }
}


//****************************************************************************
//
// Function:   get_data
//
// Purpose:    return the value of the node
//
// Parameters: none
//
// Calls:      none
//
// Time Comp:  O(1)
//
// Space Com:  O(1)
//
//****************************************************************************


size_t Node::get_data()
{
   return(data[0] * 100000000 + data[1] * 10000000 + data[2] * 1000000 +
          data[3] * 100000 + data[4] * 10000 + data[5] * 1000 +
          data[6] * 100 + data[7] * 10 + data[8]);
}