165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License"); 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License. 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * http://www.apache.org/licenses/LICENSE-2.0 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS, 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License. 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <stddef.h> 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include <stdlib.h> 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#include "value.h" 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define NULL_VALUE_TYPE 0 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define INT_VALUE_TYPE 1 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define FLOAT_VALUE_TYPE 2 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define STRING_VALUE_TYPE 3 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define BUFFER_VALUE_TYPE 4 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define MUTABLE_BUFFER_VALUE_TYPE 5 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define INT_ARRAY_VALUE_TYPE 6 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define FLOAT_ARRAY_VALUE_TYPE 7 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// Templated versions ////////////////////////////////////////////////////////////////////////////// 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntemplate<typename POD, int TYPEID> 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennPOD GetPODValue(Value value) { 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == TYPEID ? *reinterpret_cast<POD*>(value.value) : POD(); 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntemplate<typename PTR, int TYPEID> 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennPTR GetPtrValue(Value value) { 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == TYPEID ? reinterpret_cast<PTR>(value.value) : NULL; 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntemplate<typename POD, int TYPEID> 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakePODValue(POD value) { 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn Value result; 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.type = TYPEID; 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.value = malloc(sizeof(POD)); 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.count = 1; 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *reinterpret_cast<POD*>(result.value) = value; 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return result; 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntemplate<typename BASE, int TYPEID> 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakePtrValue(const BASE* values, int count) { 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn Value result; 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.type = TYPEID; 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.value = malloc(sizeof(BASE) * count); 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn memcpy(result.value, values, sizeof(BASE) * count); 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.count = count; 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return result; 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntemplate<typename POD, int TYPEID> 6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetPODValue(Value* value, POD new_value) { 6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (value->type == NULL_VALUE_TYPE) { 6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->type = TYPEID; 6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->value = malloc(sizeof(POD)); 6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->count = 1; 6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (value->type == TYPEID) { 7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *reinterpret_cast<POD*>(value->value) = new_value; 7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 1; 7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 0; 7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntemplate<typename BASE, int TYPEID> 7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetPtrValue(Value* value, const BASE* new_values, int count) { 7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (value->type == NULL_VALUE_TYPE) { 7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->type = TYPEID; 8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->value = malloc(sizeof(BASE) * count); 8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->count = count; 8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (value->type == TYPEID && value->count == count) { 8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn memcpy(value->value, new_values, sizeof(BASE) * count); 8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 1; 8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return 0; 8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// C Wrappers ////////////////////////////////////////////////////////////////////////////////////// 9165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint GetIntValue(Value value) { 9265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return GetPODValue<int, INT_VALUE_TYPE>(value); 9365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 9465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennfloat GetFloatValue(Value value) { 9665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return GetPODValue<float, FLOAT_VALUE_TYPE>(value); 9765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 9865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennconst char* GetStringValue(Value value) { 10065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return GetPtrValue<const char*, STRING_VALUE_TYPE>(value); 10165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 10265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennconst char* GetBufferValue(Value value) { 10465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return (value.type == BUFFER_VALUE_TYPE || value.type == MUTABLE_BUFFER_VALUE_TYPE) 10565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn ? (const char*)value.value 10665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn : NULL; 10765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 10865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 10965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennchar* GetMutableBufferValue(Value value) { 11065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return GetPtrValue<char*, MUTABLE_BUFFER_VALUE_TYPE>(value); 11165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 11265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint* GetIntArrayValue(Value value) { 11465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return GetPtrValue<int*, INT_ARRAY_VALUE_TYPE>(value); 11565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 11665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 11765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennfloat* GetFloatArrayValue(Value value) { 11865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return GetPtrValue<float*, FLOAT_ARRAY_VALUE_TYPE>(value); 11965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 12065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsNull(Value value) { 12265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == NULL_VALUE_TYPE; 12365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 12465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsInt(Value value) { 12665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == INT_VALUE_TYPE; 12765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 12865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 12965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsFloat(Value value) { 13065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == FLOAT_VALUE_TYPE; 13165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 13265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsString(Value value) { 13465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == STRING_VALUE_TYPE; 13565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 13665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 13765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsBuffer(Value value) { 13865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == BUFFER_VALUE_TYPE || value.type == MUTABLE_BUFFER_VALUE_TYPE; 13965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 14065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsIntArray(Value value) { 14265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == INT_ARRAY_VALUE_TYPE; 14365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 14465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsFloatArray(Value value) { 14665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.type == FLOAT_ARRAY_VALUE_TYPE; 14765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 14865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 14965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeNullValue() { 15065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn Value result; 15165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.type = NULL_VALUE_TYPE; 15265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.value = NULL; 15365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.count = 0; 15465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return result; 15565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 15665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 15765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeIntValue(int value) { 15865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePODValue<int, INT_VALUE_TYPE>(value); 15965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 16065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeFloatValue(float value) { 16265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePODValue<float, FLOAT_VALUE_TYPE>(value); 16365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 16465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeStringValue(const char* value) { 16665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePtrValue<char, STRING_VALUE_TYPE>(value, strlen(value) + 1); 16765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 16865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 16965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeBufferValue(const char* buffer, int size) { 17065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePtrValue<char, BUFFER_VALUE_TYPE>(buffer, size); 17165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 17265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 17365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeBufferValueNoCopy(const char* buffer, int size) { 17465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn Value result; 17565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.type = BUFFER_VALUE_TYPE; 17665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.value = (void*)buffer; 17765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.count = size; 17865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return result; 17965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 18065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeMutableBufferValue(const char* buffer, int size) { 18265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePtrValue<const char, MUTABLE_BUFFER_VALUE_TYPE>(buffer, size); 18365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 18465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 18565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeMutableBufferValueNoCopy(char* buffer, int size) { 18665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn Value result; 18765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.type = MUTABLE_BUFFER_VALUE_TYPE; 18865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.value = (void*)buffer; 18965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn result.count = size; 19065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return result; 19165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 19265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 19365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeIntArrayValue(const int* values, int count) { 19465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePtrValue<int, INT_ARRAY_VALUE_TYPE>(values, count); 19565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 19665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 19765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeFloatArrayValue(const float* values, int count) { 19865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return MakePtrValue<float, FLOAT_ARRAY_VALUE_TYPE>(values, count); 19965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 20065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetIntValue(Value* value, int new_value) { 20265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return SetPODValue<int, INT_VALUE_TYPE>(value, new_value); 20365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 20465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetFloatValue(Value* value, float new_value) { 20665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return SetPODValue<float, FLOAT_VALUE_TYPE>(value, new_value); 20765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 20865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 20965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetStringValue(Value* value, const char* new_value) { 21065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return SetPtrValue<char, STRING_VALUE_TYPE>(value, new_value, strlen(new_value) + 1); 21165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 21265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetMutableBufferValue(Value* value, const char* new_data, int size) { 21465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return SetPtrValue<char, MUTABLE_BUFFER_VALUE_TYPE>(value, new_data, size); 21565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 21665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 21765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetIntArrayValue(Value* value, const int* new_values, int count) { 21865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return SetPtrValue<int, INT_ARRAY_VALUE_TYPE>(value, new_values, count); 21965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 22065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 22165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetFloatArrayValue(Value* value, const float* new_values, int count) { 22265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return SetPtrValue<float, FLOAT_ARRAY_VALUE_TYPE>(value, new_values, count); 22365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 22465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 22565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint GetValueCount(Value value) { 22665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return value.count; 22765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 22865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 22965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennvoid ReleaseValue(Value* value) { 23065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (value && value->value) { 23165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn free(value->value); 23265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->value = NULL; 23365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn value->type = NULL_VALUE_TYPE; 23465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 23565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 23665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 237