Index: ppapi/shared_impl/id_assignment.h |
=================================================================== |
--- ppapi/shared_impl/id_assignment.h (revision 0) |
+++ ppapi/shared_impl/id_assignment.h (revision 0) |
@@ -0,0 +1,45 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef PPAPI_SHARED_IMPL_ID_ASSIGNMENT_H_ |
+#define PPAPI_SHARED_IMPL_ID_ASSIGNMENT_H_ |
+ |
+#include <limits> |
+ |
+#include "base/basictypes.h" |
+ |
+namespace ppapi { |
+ |
+enum PPIdType { |
+ PP_ID_TYPE_MODULE, |
+ PP_ID_TYPE_INSTANCE, |
+ PP_ID_TYPE_RESOURCE, |
+ PP_ID_TYPE_VAR, |
+ |
+ // Not a real type, must be last. |
+ PP_ID_TYPE_COUNT |
+}; |
+ |
+extern const unsigned int kPPIdTypeBits; |
+ |
+extern const int32 kMaxPPId; |
+ |
+// The most significant bits are the type, the rest are the value. |
+template <typename T> inline T MakeTypedId(T value, PPIdType type) { |
+ return (value << kPPIdTypeBits) | static_cast<T>(type); |
+} |
+ |
+template <typename T> inline bool CheckIdType(T id, PPIdType type) { |
+ // Say a resource of 0 is always valid, since that means "no resource." |
+ // You shouldn't be passing 0 var, instance, or module IDs around so those |
+ // are still invalid. |
+ if (type == PP_ID_TYPE_RESOURCE && !id) |
+ return true; |
+ const T mask = (static_cast<T>(1) << kPPIdTypeBits) - 1; |
+ return (id & mask) == type; |
+} |
+ |
+} // namespace ppapi |
+ |
+#endif // PPAPI_SHARED_IMPL_ID_ASSIGNMENT_H_ |
Property changes on: ppapi/shared_impl/id_assignment.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |