15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_SHARED_IMPL_ID_ASSIGNMENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_SHARED_IMPL_ID_ASSIGNMENT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <limits> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_shared_export.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum PPIdType { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_ID_TYPE_MODULE, 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_ID_TYPE_INSTANCE, 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_ID_TYPE_RESOURCE, 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_ID_TYPE_VAR, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not a real type, must be last. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_ID_TYPE_COUNT 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PPAPI_SHARED_EXPORT extern const unsigned int kPPIdTypeBits; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const int32 kMaxPPId; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)// The least significant bits are the type, the rest are the value. 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template <typename T> 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)inline T MakeTypedId(T value, PPIdType type) { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (value << kPPIdTypeBits) | static_cast<T>(type); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template <typename T> 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)inline bool CheckIdType(T id, PPIdType type) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Say a resource of 0 is always valid, since that means "no resource." 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // You shouldn't be passing 0 var, instance, or module IDs around so those 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are still invalid. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == PP_ID_TYPE_RESOURCE && !id) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const T mask = (static_cast<T>(1) << kPPIdTypeBits) - 1; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (id & mask) == type; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ppapi 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // PPAPI_SHARED_IMPL_ID_ASSIGNMENT_H_ 49