1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.location;
18
19import android.annotation.SystemApi;
20import android.os.Parcel;
21import android.os.Parcelable;
22
23/**
24 * @hide
25 */
26@SystemApi
27public class MemoryRegion implements Parcelable{
28
29    private int mSizeBytes;
30    private int mSizeBytesFree;
31    private boolean mIsReadable;
32    private boolean mIsWritable;
33    private boolean mIsExecutable;
34
35    /**
36     * get the capacity of the memory region in bytes
37     *
38     * @return int - the memory capacity in bytes
39     */
40    public int getCapacityBytes() {
41        return mSizeBytes;
42    }
43
44    /**
45     * get the free capacity of the memory region in bytes
46     *
47     * @return int - free bytes
48     */
49    public int getFreeCapacityBytes() {
50        return mSizeBytesFree;
51    }
52
53    /**
54     * Is the memory readable
55     *
56     * @return boolean - true if memory is readable, false otherwise
57     */
58    public boolean isReadable() {
59        return mIsReadable;
60    }
61
62    /**
63     * Is the memory writable
64     *
65     * @return boolean - true if memory is writable, false otherwise
66     */
67    public boolean isWritable() {
68        return mIsWritable;
69    }
70
71    /**
72     * Is the memory executable
73     *
74     * @return boolean - true if memory is executable, false
75     *         otherwise
76     */
77    public boolean isExecutable() {
78        return mIsExecutable;
79    }
80
81    @Override
82    public String toString() {
83        String mask = "";
84
85        if (isReadable()) {
86            mask += "r";
87        } else {
88            mask += "-";
89        }
90
91        if (isWritable()) {
92            mask += "w";
93        } else {
94            mask += "-";
95        }
96
97        if (isExecutable()) {
98            mask += "x";
99        } else {
100            mask += "-";
101        }
102
103        String retVal = "[ " + mSizeBytesFree + "/ " + mSizeBytes + " ] : " + mask;
104
105        return retVal;
106    }
107
108    @Override
109    public int describeContents() {
110        return 0;
111    }
112
113    @Override
114    public void writeToParcel(Parcel dest, int flags) {
115        dest.writeInt(mSizeBytes);
116        dest.writeInt(mSizeBytesFree);
117        dest.writeInt(mIsReadable ? 1 : 0);
118        dest.writeInt(mIsWritable ? 1 : 0);
119        dest.writeInt(mIsExecutable ? 1 : 0);
120    }
121
122    public MemoryRegion(Parcel source) {
123        mSizeBytes = source.readInt();
124        mSizeBytesFree = source.readInt();
125        mIsReadable = source.readInt() != 0;
126        mIsWritable = source.readInt() != 0;
127        mIsExecutable = source.readInt() != 0;
128    }
129
130    public static final Parcelable.Creator<MemoryRegion> CREATOR
131            = new Parcelable.Creator<MemoryRegion>() {
132        public MemoryRegion createFromParcel(Parcel in) {
133            return new MemoryRegion(in);
134        }
135
136        public MemoryRegion[] newArray(int size) {
137            return new MemoryRegion[size];
138        }
139    };
140
141}
142