Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / gpu / command_buffer / common / id_allocator.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This file contains the definition of the IdAllocator class.
6
7 #ifndef GPU_COMMAND_BUFFER_CLIENT_ID_ALLOCATOR_H_
8 #define GPU_COMMAND_BUFFER_CLIENT_ID_ALLOCATOR_H_
9
10 #include <stdint.h>
11
12 #include <set>
13 #include <utility>
14
15 #include "base/compiler_specific.h"
16 #include "base/macros.h"
17 #include "gpu/gpu_export.h"
18
19 namespace gpu {
20
21 // A resource ID, key to the resource maps.
22 typedef uint32_t ResourceId;
23 // Invalid resource ID.
24 static const ResourceId kInvalidResource = 0u;
25
26 // A class to manage the allocation of resource IDs.
27 class GPU_EXPORT IdAllocator {
28  public:
29   IdAllocator();
30   ~IdAllocator();
31
32   // Allocates a new resource ID.
33   ResourceId AllocateID();
34
35   // Allocates an Id starting at or above desired_id.
36   // Note: may wrap if it starts near limit.
37   ResourceId AllocateIDAtOrAbove(ResourceId desired_id);
38
39   // Marks an id as used. Returns false if id was already used.
40   bool MarkAsUsed(ResourceId id);
41
42   // Frees a resource ID.
43   void FreeID(ResourceId id);
44
45   // Checks whether or not a resource ID is in use.
46   bool InUse(ResourceId id) const;
47
48  private:
49   // TODO(gman): This would work much better with ranges or a hash table.
50   typedef std::set<ResourceId> ResourceIdSet;
51
52   // The highest ID on the used list.
53   ResourceId LastUsedId() const;
54
55   // Lowest ID that isn't on the used list. This is slow, use as a last resort.
56   ResourceId FindFirstUnusedId() const;
57
58   ResourceIdSet used_ids_;
59   ResourceIdSet free_ids_;
60
61   DISALLOW_COPY_AND_ASSIGN(IdAllocator);
62 };
63
64 }  // namespace gpu
65
66 #endif  // GPU_COMMAND_BUFFER_CLIENT_ID_ALLOCATOR_H_