summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/libANGLE/HandleRangeAllocator.h
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/src/libANGLE/HandleRangeAllocator.h')
-rwxr-xr-xgfx/angle/src/libANGLE/HandleRangeAllocator.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/gfx/angle/src/libANGLE/HandleRangeAllocator.h b/gfx/angle/src/libANGLE/HandleRangeAllocator.h
new file mode 100755
index 000000000..20f9a116b
--- /dev/null
+++ b/gfx/angle/src/libANGLE/HandleRangeAllocator.h
@@ -0,0 +1,59 @@
+//
+// Copyright (c) 2002-2016 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// HandleRangeAllocator.h: Defines the gl::HandleRangeAllocator class, which is used to
+// allocate contiguous ranges of GL path handles.
+
+#ifndef LIBANGLE_HANDLERANGEALLOCATOR_H_
+#define LIBANGLE_HANDLERANGEALLOCATOR_H_
+
+#include <map>
+
+#include "angle_gl.h"
+#include "common/angleutils.h"
+
+namespace gl
+{
+
+// Allocates contiguous ranges of path object handles.
+class HandleRangeAllocator final : angle::NonCopyable
+{
+ public:
+ static const GLuint kInvalidHandle;
+
+ HandleRangeAllocator();
+
+ // Allocates a new path handle.
+ GLuint allocate();
+
+ // Allocates a handle starting at or above the value of |wanted|.
+ // Note: may wrap if it starts near limit.
+ GLuint allocateAtOrAbove(GLuint wanted);
+
+ // Allocates |range| amount of contiguous paths.
+ // Returns the first id to |first_id| or |kInvalidHandle| if
+ // allocation failed.
+ GLuint allocateRange(GLuint range);
+
+ // Marks an id as used. Returns false if handle was already used.
+ bool markAsUsed(GLuint handle);
+
+ // Release handle.
+ void release(GLuint handle);
+
+ // Release a |range| amount of contiguous handles, starting from |first|
+ void releaseRange(GLuint first, GLuint range);
+
+ // Checks whether or not a resource ID is in use.
+ bool isUsed(GLuint handle) const;
+
+ private:
+ std::map<GLuint, GLuint> mUsed;
+};
+
+} // namespace gl
+
+#endif // LIBANGLE_HANDLERANGEALLOCATOR_H_ \ No newline at end of file