Build type information on first use (load-time), instead of using a hardcoded list

--HG--
branch : dynamiccore2
This commit is contained in:
Bart van Strien
2016-11-13 16:38:57 +01:00
parent 452a8a877e
commit c761202486
192 changed files with 734 additions and 614 deletions
+20 -97
View File
@@ -23,115 +23,38 @@
// STD
#include <bitset>
#include <vector>
namespace love
{
enum Type
void addTypeName(uint32_t type, const char *name);
bool getTypeName(const char *in, uint32_t &out);
bool getTypeName(uint32_t in, const char *&out);
class Type
{
INVALID_ID = 0,
// Cross-module types.
OBJECT_ID,
DATA_ID,
MODULE_ID,
STREAM_ID,
public:
static const uint32_t MAX_TYPES = 128;
// Filesystem.
FILESYSTEM_FILE_ID,
FILESYSTEM_DROPPED_FILE_ID,
FILESYSTEM_FILE_DATA_ID,
// TODO: Type-checking templated constructor
Type(Type *parent);
// Font
FONT_GLYPH_DATA_ID,
FONT_RASTERIZER_ID,
uint32_t getId();
bool isa(const uint32_t &other);
bool isa(Type &other);
// Graphics
GRAPHICS_DRAWABLE_ID,
GRAPHICS_TEXTURE_ID,
GRAPHICS_IMAGE_ID,
GRAPHICS_QUAD_ID,
GRAPHICS_FONT_ID,
GRAPHICS_PARTICLE_SYSTEM_ID,
GRAPHICS_SPRITE_BATCH_ID,
GRAPHICS_CANVAS_ID,
GRAPHICS_SHADER_ID,
GRAPHICS_MESH_ID,
GRAPHICS_TEXT_ID,
GRAPHICS_VIDEO_ID,
private:
static uint32_t nextId;
void init();
// Image
IMAGE_IMAGE_DATA_ID,
IMAGE_COMPRESSED_IMAGE_DATA_ID,
bool inited;
Type *parent;
// Joystick
JOYSTICK_JOYSTICK_ID,
// Math
MATH_RANDOM_GENERATOR_ID,
MATH_BEZIER_CURVE_ID,
MATH_COMPRESSED_DATA_ID,
// Audio
AUDIO_SOURCE_ID,
// Sound
SOUND_SOUND_DATA_ID,
SOUND_DECODER_ID,
// Mouse
MOUSE_CURSOR_ID,
// Physics
PHYSICS_WORLD_ID,
PHYSICS_CONTACT_ID,
PHYSICS_BODY_ID,
PHYSICS_FIXTURE_ID,
PHYSICS_SHAPE_ID,
PHYSICS_CIRCLE_SHAPE_ID,
PHYSICS_POLYGON_SHAPE_ID,
PHYSICS_EDGE_SHAPE_ID,
PHYSICS_CHAIN_SHAPE_ID,
PHYSICS_JOINT_ID,
PHYSICS_MOUSE_JOINT_ID,
PHYSICS_DISTANCE_JOINT_ID,
PHYSICS_PRISMATIC_JOINT_ID,
PHYSICS_REVOLUTE_JOINT_ID,
PHYSICS_PULLEY_JOINT_ID,
PHYSICS_GEAR_JOINT_ID,
PHYSICS_FRICTION_JOINT_ID,
PHYSICS_WELD_JOINT_ID,
PHYSICS_ROPE_JOINT_ID,
PHYSICS_WHEEL_JOINT_ID,
PHYSICS_MOTOR_JOINT_ID,
// Thread
THREAD_THREAD_ID,
THREAD_CHANNEL_ID,
// Video
VIDEO_VIDEO_STREAM_ID,
// The modules themselves. Only add abstracted modules here.
MODULE_FILESYSTEM_ID,
MODULE_GRAPHICS_ID,
MODULE_IMAGE_ID,
MODULE_SOUND_ID,
// Count the number of bits needed.
TYPE_MAX_ENUM
uint32_t id;
std::bitset<MAX_TYPES> bits;
};
typedef std::bitset<TYPE_MAX_ENUM> TypeBits;
/**
* Array of length TYPE_MAX_ENUM containing the flags for each love Type.
**/
extern const TypeBits *typeFlags;
void addTypeName(Type type, const char *name);
bool getTypeName(const char *in, Type &out);
bool getTypeName(Type in, const char *&out);
} // love
#endif // LOVE_TYPES_H