packages feed

hs-mesos-0.20.0.0: ext/types/slave_info.cpp

#include <iostream>
#include "types.h"

using namespace mesos;

SlaveInfoPtr toSlaveInfo(char* hostname,
			 int hostnameLen,
			 unsigned int* port,
			 ResourcePtr* resources,
			 int resourcesLen,
			 AttributePtr* attributes,
			 int attributesLen,
			 SlaveIDPtr slaveID,
			 bool* checkpoint)
{
  SlaveInfoPtr info = new SlaveInfo();
  info->set_hostname(hostname, hostnameLen);
  if (port != NULL)
    info->set_port(*port);
  if (resourcesLen > 0)
    {
      ::google::protobuf::RepeatedPtrField<Resource>* rs = info->mutable_resources();
      for (int i = 0; i < resourcesLen; ++i)
	*rs->Add() = *resources[i];
    }
  if (attributesLen > 0)
    {
      ::google::protobuf::RepeatedPtrField<Attribute>* as = info->mutable_attributes();
      for (int i = 0; i < attributesLen; ++i)
	*as->Add() = *attributes[i];
    }
  if (slaveID != NULL)
    *info->mutable_id() = *slaveID;

  if (checkpoint != NULL)
    info->set_checkpoint(*checkpoint);

  return info;
}

void fromSlaveInfo(SlaveInfoPtr slaveInfo,
		   char** hostname,
		   int* hostnameLen,
		   bool* portSet,
		   unsigned int* port,
		   ResourcePtr** resources,
		   int* resourcesLen,
		   AttributePtr** attributes,
		   int* attributeLen,
		   SlaveIDPtr* slaveID,
		   bool* checkpointSet,
		   bool* checkpoint)
{
  *portSet = false;
  *checkpointSet = false;

  std::string h = slaveInfo->hostname();
  *hostname = (char*) h.data();
  *hostnameLen = h.size();

  if (slaveInfo->has_port())
    {
      *port = slaveInfo->port();
      *portSet = true;
    }

  *resourcesLen = slaveInfo->resources_size();
  *resources = slaveInfo->mutable_resources()->mutable_data();

  *attributeLen = slaveInfo->attributes_size();
  *attributes = slaveInfo->mutable_attributes()->mutable_data();

  if (slaveInfo->has_id())
    *slaveID = slaveInfo->mutable_id();

  if (slaveInfo->has_checkpoint())
    {
      *checkpoint = slaveInfo->checkpoint();
      *checkpointSet = true;
    }	
}

void destroySlaveInfo(SlaveInfoPtr slaveInfo)
{
  delete slaveInfo;
}