1dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber/* 2dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Copyright (C) 2016 The Android Open Source Project 3dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * 4dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * you may not use this file except in compliance with the License. 6dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * You may obtain a copy of the License at 7dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * 8dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * 10dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * See the License for the specific language governing permissions and 14dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber * limitations under the License. 15dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber */ 16dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 17dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#ifndef EPHEMERAL_STORAGE_H_ 18dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 19dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#define EPHEMERAL_STORAGE_H_ 20dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 21dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#include <android-base/macros.h> 22242030ddad46c24c90222a334090391fa4044f64Martijn Coenen#include <hidl/HidlSupport.h> 23dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#include <jni.h> 24dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#include <utils/Vector.h> 25dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 26dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Hubernamespace android { 27dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 28dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#define DECLARE_ALLOC_METHODS(Suffix,Type) \ 29dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber const ::android::hardware::hidl_vec<Type> * \ 30dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber allocTemporary ## Suffix ## Vector( \ 31dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber JNIEnv *env, Type ## Array arrayObj); 32dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 33dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberstruct EphemeralStorage { 34dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber EphemeralStorage(); 35dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber ~EphemeralStorage(); 36dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 37dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber void release(JNIEnv *env); 38dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 39dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber hardware::hidl_string *allocStringArray(size_t size); 40dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 41dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber void *allocTemporaryStorage(size_t size); 42dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 43dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber const ::android::hardware::hidl_string *allocTemporaryString( 44dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber JNIEnv *env, jstring stringObj); 45dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 46dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DECLARE_ALLOC_METHODS(Int8,jbyte) 47dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DECLARE_ALLOC_METHODS(Int16,jshort) 48dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DECLARE_ALLOC_METHODS(Int32,jint) 49dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DECLARE_ALLOC_METHODS(Int64,jlong) 50dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DECLARE_ALLOC_METHODS(Float,jfloat) 51dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DECLARE_ALLOC_METHODS(Double,jdouble) 52dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 53dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huberprivate: 54dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber enum Type { 55dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_STRING_ARRAY, 56dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_STORAGE, 57dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_STRING, 58dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_Int8_ARRAY, 59dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_Int16_ARRAY, 60dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_Int32_ARRAY, 61dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_Int64_ARRAY, 62dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_Float_ARRAY, 63dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber TYPE_Double_ARRAY, 64dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber }; 65dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 66dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber struct Item { 67dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber Type mType; 68dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber jobject mObj; 69dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber void *mPtr; 70dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber }; 71dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 72dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber Vector<Item> mItems; 73dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 74dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber DISALLOW_COPY_AND_ASSIGN(EphemeralStorage); 75dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber}; 76dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 77dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#undef DECLARE_ALLOC_METHODS 78dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 79dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber} // namespace android 80dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber 81dab5fc65b92b37ee623b10f86a6ccf1709ba17d4Andreas Huber#endif // EPHEMERAL_STORAGE_H_ 82