| // Copyright 2012 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // This file contains the definition of the IdAllocator class. | |
| #ifndef GPU_COMMAND_BUFFER_COMMON_ID_ALLOCATOR_H_ | |
| #define GPU_COMMAND_BUFFER_COMMON_ID_ALLOCATOR_H_ | |
| #include <stdint.h> | |
| #include <map> | |
| #include <utility> | |
| #include "base/compiler_specific.h" | |
| #include "gpu/command_buffer/common/gpu_command_buffer_common_export.h" | |
| namespace gpu { | |
| // A resource ID, key to the resource maps. | |
| typedef uint32_t ResourceId; | |
| // Invalid resource ID. | |
| static const ResourceId kInvalidResource = 0u; | |
| // A class to manage the allocation of resource IDs. | |
| class GPU_COMMAND_BUFFER_COMMON_EXPORT IdAllocator { | |
| public: | |
| IdAllocator(); | |
| IdAllocator(const IdAllocator&) = delete; | |
| IdAllocator& operator=(const IdAllocator&) = delete; | |
| ~IdAllocator(); | |
| // Allocates a new resource ID. | |
| ResourceId AllocateID(); | |
| // Allocates an Id starting at or above desired_id. | |
| // Note: may wrap if it starts near limit. | |
| ResourceId AllocateIDAtOrAbove(ResourceId desired_id); | |
| // Allocates |range| amount of contiguous ids. | |
| // Returns the first id to |first_id| or |kInvalidResource| if | |
| // allocation failed. | |
| ResourceId AllocateIDRange(uint32_t range); | |
| // Marks an id as used. Returns false if id was already used. | |
| bool MarkAsUsed(ResourceId id); | |
| // Frees a resource ID. | |
| void FreeID(ResourceId id); | |
| // Frees a |range| amount of contiguous ids, starting from |first_id|. | |
| void FreeIDRange(ResourceId first_id, uint32_t range); | |
| // Checks whether or not a resource ID is in use. | |
| bool InUse(ResourceId id) const; | |
| private: | |
| // first_id -> last_id mapping. | |
| typedef std::map<ResourceId, ResourceId> ResourceIdRangeMap; | |
| ResourceIdRangeMap used_ids_; | |
| }; | |
| } // namespace gpu | |
| #endif // GPU_COMMAND_BUFFER_COMMON_ID_ALLOCATOR_H_ |