VALUE MethodResultJni::enumerateRubyObjects(VALUE klass)
{
    RAWTRACE("enumerateRubyObjects");

    JNIEnv *env = jniInit();
    if (!env) {
        RAWLOG_ERROR("JNI initialization failed");
        rb_raise(rb_eRuntimeError,"JNI initialization failed");
        return Qnil;;
    }

    if(getResultType(env) == typeList)
    {
        CHoldRubyValue valArray(rho_ruby_create_array());

        HStringVector pIDs = rho_cast<HStringVector>(env, getListResult(env));

        for(HStringVector::element_type::size_type i = 0; i < pIDs->size(); ++i)
        {
            VALUE valObj = rho_ruby_create_object_with_id( klass, (*pIDs)[i].c_str() );
            rho_ruby_add_to_array(valArray, valObj);
        }

        RAWTRACE("has enumerated");
        reset(env);
        return valArray;
    } else
    {
        return toRuby();
    }

}
bool 
LibXMLXPathResult::getInvalidIteratorState()
{
  short restype = getResultType();
  if (restype != UNORDERED_NODE_SNAPSHOT_TYPE && restype != ANY_TYPE && restype != ORDERED_NODE_SNAPSHOT_TYPE)
    return true;
  if (_xpathPtr->nodesetval == 0)
    return true;
  if (_xpathPtr->nodesetval->nodeNr <= _curIdx)
    return true;
  return false;
}
MixingResult::MixingResult (const char* n, 
			    const char* rtype, 
			    const char* ptype, 
			    double res,
			    double stat,
			    double syst,
			    double modl,
			    double coef) 
  : name(n)//fill the shiz for the class
  , measurement(res)
  , error(0)
  , correlations()
  , index(-1)
  , myType(getResultType(rtype))
  , myPrime(getPrimeType(ptype))
  , active(false) 
  , coefficient(coef)
{

  if (name == "fitresult") active = false;
  allResults.push_back(this); 
  mapResults[name] = this; 
  error = sqrt(pow(stat, 2) + pow(syst, 2) + pow(modl, 2)); 

  
  std::cout << name << " : "
	    << measurement << " +/- "
	    << error << " ("
	    << stat << ", "
	    << syst << ", "
	    << modl << ") "
            << coef << " "
	    << rtype << " "
	    << myType << " "
	    << ptype << " " 
	    << myPrime << " " 
	    << std::endl; 

}
std::string MethodResultJni::toJson()
{
    std::string res = "{}";
    JNIEnv *env = jniInit();
    if (!env) {
        RAWLOG_FATAL("JNI initialization failed");
        rb_raise(rb_eRuntimeError,"JNI initialization failed");
        return res;
    }

    int type = getResultType(env);
    switch(type)
    {
    case typeNone:
        break;
    case typeBoolean:
//        {
//            bool booleanResult = static_cast<bool>(getBooleanResult(env));
//            res = booleanResult ? Qtrue : Qfalse;
//        }
        break;
    case typeInteger:
//        {
//            int intResult = static_cast<int>(getIntegerResult(env));
//            res = rho_ruby_create_integer(intResult);
//        }
        break;
    case typeDouble:
//        {
//            double doubleResult = static_cast<double>(getDoubleResult(env));
//            res = rho_ruby_create_double(doubleResult);
//        }
        break;
    case typeString:
//        {
//            jhstring jhStrResult = getStringResult(env);
//            res = rho_cast<VALUE>(env, jhStrResult);
//        }
        break;
    case typeList:
//        {
//            jhobject jhListResult = getListResult(env);
//            res = rho_cast<VALUE>(env, jhListResult);
//        }
        break;
    case typeMap:
//        {
//            jhobject jhMapResult = getMapResult(env);
//            res = rho_cast<VALUE>(env, jhMapResult);
//        }
        break;
    case typeArgError:
    case typeError:
        {
            res = "{'error' : { 'message' : '";
            res += getErrorMessage(env) + "' } }";
        }
        break;
    default:
        RAWLOG_ERROR("Unknown runtime error in MethodResultJni class");
        res = "{'error' : { 'message' : 'Unknown runtime error in MethodResultJni class' } }";
    }

    reset(env);
    return res;
}
VALUE MethodResultJni::toRuby()
{
    RAWTRACE("toRuby");

    VALUE res = Qnil;

    JNIEnv *env = jniInit();
    if (!env) {
        RAWLOG_FATAL("JNI initialization failed");
        rb_raise(rb_eRuntimeError,"JNI initialization failed");
        return Qnil;
    }

    int type = getResultType(env);
    switch(type)
    {
    case typeNone:
        break;
    case typeBoolean:
        {
            bool booleanResult = static_cast<bool>(getBooleanResult(env));
            res = booleanResult ? Qtrue : Qfalse;
        }
        break;
    case typeInteger:
    {
        int intResult = static_cast<int>(getIntegerResult(env));
        res = rho_ruby_create_integer(intResult);
    }
    break;
    case typeDouble:
    {
        double doubleResult = static_cast<double>(getDoubleResult(env));
        res = rho_ruby_create_double(doubleResult);
    }
    break;
    case typeString:
        {
            jhstring jhStrResult = getStringResult(env);
            res = rho_cast<VALUE>(env, jhStrResult);
        }
        break;
    case typeList:
        {
            jhobject jhListResult = getListResult(env);
            res = rho_cast<VALUE>(env, jhListResult);
        }
        break;
    case typeMap:
        {
            jhobject jhMapResult = getMapResult(env);
            res = rho_cast<VALUE>(env, jhMapResult);
        }
        break;
    case typeArgError:
        rho_ruby_raise_argerror(getErrorMessage(env).c_str());
        break;
    case typeError:
        rb_raise(rb_eRuntimeError, getErrorMessage(env).c_str());
        break;
    default:
        RAWLOG_FATAL("Unknown runtime error in MethodResultJni class");
        rb_raise(rb_eRuntimeError,"Unknown runtime error in MethodResultJni class");
    }

    reset(env);
    return res;
}