19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
178a0de58ece89c467c8e7415097d193e5f8db9db8Dianne Hackbornpackage com.android.internal.app;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackbornimport android.util.ArrayMap;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.SparseArray;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ProcessMap<E> {
23be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackborn    final ArrayMap<String, SparseArray<E>> mMap
24be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackborn            = new ArrayMap<String, SparseArray<E>>();
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public E get(String name, int uid) {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SparseArray<E> uids = mMap.get(name);
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (uids == null) return null;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return uids.get(uid);
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public E put(String name, int uid, E value) {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SparseArray<E> uids = mMap.get(name);
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (uids == null) {
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            uids = new SparseArray<E>(2);
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mMap.put(name, uids);
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        uids.put(uid, value);
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return value;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
42d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn    public E remove(String name, int uid) {
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SparseArray<E> uids = mMap.get(name);
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (uids != null) {
45d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn            final E old = uids.removeReturnOld(uid);
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (uids.size() == 0) {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mMap.remove(name);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
49d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn            return old;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
51d23e0d6901935588f9472bd7073fea0009581e9bDianne Hackborn        return null;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
54be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackborn    public ArrayMap<String, SparseArray<E>> getMap() {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mMap;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
574eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato
584eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato    public int size() {
594eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato        return mMap.size();
604eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato    }
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
62