// 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 <stdint.h>

#include <limits>

#include "ppapi/shared_impl/ppapi_shared_export.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
};

PPAPI_SHARED_EXPORT extern const unsigned int kPPIdTypeBits;

extern const int32_t kMaxPPId;

// The least 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_
