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#ifndef ANDROID_FILTERFW_CORE_VALUE_H
1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#define ANDROID_FILTERFW_CORE_VALUE_H
1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#ifdef __cplusplus
2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennextern "C" {
2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#endif
2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// TODO: As this is no longer part of the proposed NDK, should we make this object-oriented (C++)
2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// instead? We can also probably clean this up a bit.
2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// TODO: Change this to an opaque handle?
2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renntypedef struct {
2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  void* value;
3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  int type;
3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn  int count;
3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} Value;
3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// TODO: Probably should make these const Value*?
3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint GetIntValue(Value value);
3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennfloat GetFloatValue(Value value);
3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennconst char* GetStringValue(Value value);
3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennconst char* GetBufferValue(Value value);
3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennchar* GetMutableBufferValue(Value value);
4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint* GetIntArrayValue(Value value);
4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennfloat* GetFloatArrayValue(Value value);
4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// TODO: Probably should make these const Value*?
4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsNull(Value value);
4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsInt(Value value);
4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsFloat(Value value);
4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsString(Value value);
4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsBuffer(Value value);
4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsMutableBuffer(Value value);
5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsIntArray(Value value);
5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint ValueIsFloatArray(Value value);
5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeNullValue();
5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeIntValue(int value);
5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeFloatValue(float value);
5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeStringValue(const char* value);
5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeBufferValue(const char* data, int size);
5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeBufferValueNoCopy(const char* data, int size);
5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeMutableBufferValue(const char* data, int size);
6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeMutableBufferValueNoCopy(char* data, int size);
6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeIntArrayValue(const int* values, int count);
6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius RennValue MakeFloatArrayValue(const float* values, int count);
6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn// Note: These only alloc if value is Null! Otherwise they overwrite, so data must fit!
6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetIntValue(Value* value, int new_value);
6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetFloatValue(Value* value, float new_value);
6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetStringValue(Value* value, const char* new_value);
6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetMutableBufferValue(Value* value, const char* new_data, int size);
6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetIntArrayValue(Value* value, const int* new_values, int count);
7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint SetFloatArrayValue(Value* value, const float* new_values, int count);
7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennint GetValueCount(Value value);
7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennvoid ReleaseValue(Value* value);
7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#ifdef __cplusplus
7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} // extern "C"
7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#endif
7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn#endif  // ANDROID_FILTERFW_FILTER_VALUE_H
81