1c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy/*
2c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * Copyright (C) 2013 The Android Open Source Project
3c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy *
4c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * you may not use this file except in compliance with the License.
6c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * You may obtain a copy of the License at
7c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy *
8c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy *
10c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * Unless required by applicable law or agreed to in writing, software
11c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * See the License for the specific language governing permissions and
14c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy * limitations under the License.
15c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy */
16c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
17c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy#ifndef ANDROID_HWUI_PAIR_H
18c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy#define ANDROID_HWUI_PAIR_H
19c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
20487a92caef2eb90a62e8f8d7a6fe6315f1c1d8d8Rob Tsuk#include <utils/TypeHelpers.h>
21487a92caef2eb90a62e8f8d7a6fe6315f1c1d8d8Rob Tsuk
22c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guynamespace android {
23c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guynamespace uirenderer {
24c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
25c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guytemplate <typename F, typename S>
26c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guystruct Pair {
27c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    F first;
28c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    S second;
29c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
30c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    Pair() { }
31c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    Pair(const Pair& o) : first(o.first), second(o.second) { }
32c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    Pair(const F& f, const S& s) : first(f), second(s)  { }
33c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
34c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    inline const F& getFirst() const {
35c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy        return first;
36c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    }
37c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
38c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    inline const S& getSecond() const {
39c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy        return second;
40c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy    }
41c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy};
42c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
43c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy}; // namespace uirenderer
44c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
45c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guytemplate <typename F, typename S>
46c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guystruct trait_trivial_ctor< uirenderer::Pair<F, S> >
47c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy{ enum { value = aggregate_traits<F, S>::has_trivial_ctor }; };
48c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guytemplate <typename F, typename S>
49c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guystruct trait_trivial_dtor< uirenderer::Pair<F, S> >
50c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy{ enum { value = aggregate_traits<F, S>::has_trivial_dtor }; };
51c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guytemplate <typename F, typename S>
52c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guystruct trait_trivial_copy< uirenderer::Pair<F, S> >
53c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy{ enum { value = aggregate_traits<F, S>::has_trivial_copy }; };
54c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guytemplate <typename F, typename S>
55c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guystruct trait_trivial_move< uirenderer::Pair<F, S> >
56c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy{ enum { value = aggregate_traits<F, S>::has_trivial_move }; };
57c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
58c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy}; // namespace android
59c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy
60c5cbee7d78513527e89450e6369a30a04b2d5e7aRomain Guy#endif // ANDROID_HWUI_PAIR_H
61