///////////////////////////////////////////////////////////////////
// AUTOGENERATED do not edit by hand                             //
///////////////////////////////////////////////////////////////////
#pragma once
#include <serializer/serializer.h>

struct vector2 {
  float x;
  float y;

  void setDefaultValues() {
    std::memset(this, 0, sizeof(vector2));
  }

  bool equals(const vector2 & rhs) const {
    return
      x == rhs.x &&
      y == rhs.y;
  }
};

inline bool operator==(const vector2 &lhs, const vector2 &rhs) {
  return lhs.equals(rhs);
}

inline bool operator!=(const vector2 &lhs, const vector2 &rhs) {
  return !lhs.equals(rhs);
}

///////////////////////////////////////////////////////////////////
// serializer                                                    //
///////////////////////////////////////////////////////////////////
inline void serialize(vector2 &o, ISerializer &s) {
  if(s.node_begin("vector2", ros::hash("vector2"), &o)) {
    s.key("x");
    serialize(o.x, s);
    s.key("y");
    serialize(o.y, s);
    s.node_end();
  }
  s.end();
}

///////////////////////////////////////////////////////////////////
// deserializer                                                  //
///////////////////////////////////////////////////////////////////
inline void deserialize(vector2 &o, IDeserializer &s) {
  o.setDefaultValues();
  while (s.next_key()) {
    switch (s.hash_key()) {
      case ros::hash("x"):
        deserialize(o.x, s);
        break;
      case ros::hash("y"):
        deserialize(o.y, s);
        break;
      default: s.skip_key(); break;
    }
  }
}

///////////////////////////////////////////////////////////////////
// hashing                                                       //
///////////////////////////////////////////////////////////////////
namespace ros {
  inline ros::hash_value hash(vector2 &o) {
    ros::hash_value h = ros::hash(o.x);
    h = ros::xor64(h);
    h ^= ros::hash(o.y);
    return h;
  }
}

///////////////////////////////////////////////////////////////////
// randomize                                                     //
///////////////////////////////////////////////////////////////////
inline void randomize(vector2 &o, ros::hash_value & h) {
  randomize(o.x, h);
  randomize(o.y, h);
}
