packages feed

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

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

using namespace mesos;

ValuePtr toValue(int type,
		 double scalar,
		 ValueRangePtr* ranges,
		 int rangeLen,
		 StdStringPtr* strings,
		 int stringsLen,
		 char* text,
		 int textLen)
{
  ValuePtr value = new Value();
  value->set_type((Value_Type) type);
  if (type == Value_Type_SCALAR)
    {
      Value_Scalar s;
      s.set_value(scalar);
      *value->mutable_scalar() = s;
    }
  else if (type == Value_Type_RANGES)
    {
      Value_RangesPtr rs = value->mutable_ranges();
      for (int i = 0; i < rangeLen; ++i)
	*rs->add_range() = *ranges[i];
    }
  else if (type == Value_Type_SET)
    {
      Value_SetPtr set = value->mutable_set();
      for (int i = 0; i < stringsLen; ++i)
	set->add_item(*strings[i]);
    }
  else if (type == Value_Type_TEXT)
    {
      Value_Text t;
      t.set_value(text, textLen);
      *value->mutable_text() = t;
    }

  return value;
}

void fromValue(ValuePtr value,
	       int* type,
	       double* scalar,
	       ValueRangePtr** ranges,	
	       int* rangeLen,
	       StdStringPtr** strings,
	       int* stringsLen,
	       char** text,
	       int* textLen)
{
  Value_Type t = value->type();
  *type = (int) t;
  if (t == Value_Type_SCALAR)
    {
      *scalar = value->mutable_scalar()->value();
    }
  else if (t == Value_Type_RANGES)
    {
      *rangeLen = value->mutable_ranges()->range_size();
      *ranges = value->mutable_ranges()->mutable_range()->mutable_data();
    }
  else if (t == Value_Type_SET)
    {
      *stringsLen = value->set().item_size();
      *strings = value->mutable_set()->mutable_item()->mutable_data();
    }
  else if (t == Value_Type_TEXT)
    {
      std::string* txt = value->mutable_text()->mutable_value();
      *text = (char*) txt->data();
      *textLen = txt->size();
    }
}

void destroyValue(ValuePtr value)
{
  delete value;
}