Flattenable.h revision a580e68cc3bea688167eb5e55122bec8e83ab939
1a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian/*
2a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * Copyright (C) 2010 The Android Open Source Project
3a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian *
4a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * you may not use this file except in compliance with the License.
6a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * You may obtain a copy of the License at
7a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian *
8a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian *
10a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * Unless required by applicable law or agreed to in writing, software
11a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * See the License for the specific language governing permissions and
14a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian * limitations under the License.
15a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian */
16a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
17a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#ifndef ANDROID_UTILS_FLATTENABLE_H
18a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#define ANDROID_UTILS_FLATTENABLE_H
19a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
20a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
21a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#include <stdint.h>
22a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#include <sys/types.h>
23a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#include <utils/Errors.h>
24a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
25a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopiannamespace android {
26a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
27a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopianclass Flattenable
28a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian{
29a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopianpublic:
30a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // size in bytes of the flattened object
31a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    virtual size_t getFlattenedSize() const = 0;
32a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
33a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // number of file descriptors to flatten
34a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    virtual size_t getFdCount() const = 0;
35a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
36a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // flattens the object into buffer.
37a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // size should be at least of getFlattenedSize()
38a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // file descriptors are written in the fds[] array but ownership is
39a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // not transfered (ie: they must be dupped by the caller of
40a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // flatten() if needed).
41a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    virtual status_t flatten(void* buffer, size_t size,
42a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian            int fds[], size_t count) const = 0;
43a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
44a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // unflattens the object from buffer.
45a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // size should be equal to the value of getFlattenedSize() when the
46a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // object was flattened.
47a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // unflattened file descriptors are found in the fds[] array and
48a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // don't need to be dupped(). ie: the caller of unflatten doesn't
49a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // keep ownership. If a fd is not retained by unflatten() it must be
50a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    // explicitly closed.
51a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    virtual status_t unflatten(void const* buffer, size_t size,
52a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian            int fds[], size_t count) = 0;
53a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
54a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopianprotected:
55a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian    virtual ~Flattenable() = 0;
56a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
57a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian};
58a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
59a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian}; // namespace android
60a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
61a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian
62a580e68cc3bea688167eb5e55122bec8e83ab939Mathias Agopian#endif /* ANDROID_UTILS_FLATTENABLE_H */
63