packages feed

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

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

using namespace mesos;

ResourcePtr toResource(char* name,
		       int nameLen,
		       ValuePtr value,
		       char* role,
		       int roleLen)
{
  ResourcePtr resource = new Resource();
  resource->set_name(name, nameLen);
  resource->set_type(value->type());

  if (value->has_scalar())
    *(resource->mutable_scalar()) = *value->mutable_scalar();

  if (value->has_ranges())
    *(resource->mutable_ranges()) = *value->mutable_ranges();

  if (value->has_set())
    *(resource->mutable_set()) = *value->mutable_set();

  if (value->has_text())
    *resource->mutable_set()->add_item() = value->mutable_text()->value();

  if (role != NULL)
    resource->set_role(role, roleLen);

  return resource;
}

void fromResource(ResourcePtr resource,
		  char** name,
		  int* nameLen,
		  ValuePtr* value,
		  char** role,
		  int* roleLen)
{
  std::string* n = resource->mutable_name();
  *name = (char*) n->data();
  *nameLen = n->size();

  Value* v = new Value();
  if (resource->has_scalar())
    {
      v->set_type(Value_Type_SCALAR);
      *v->mutable_scalar() = resource->scalar();
    }
  if (resource->has_ranges())
    {
      v->set_type(Value_Type_RANGES);
      *v->mutable_ranges() = resource->ranges();
    }
  if (resource->has_set())
    {
      v->set_type(Value_Type_SET);
      *v->mutable_set() = resource->set();
    }

  *value = v;

  std::string* r = resource->mutable_role();
  *role = (char*) r->data();
  *roleLen = r->size();
}

void destroyResource(ResourcePtr resource)
{
  delete resource;
}