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