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