123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215 |
- /**
- * Copyright (c) 2006-2015 LOVE Development Team
- *
- * This software is provided 'as-is', without any express or implied
- * warranty. In no event will the authors be held liable for any damages
- * arising from the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software
- * in a product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- **/
- #include "types.h"
- #include "StringMap.h"
- namespace love
- {
- static const TypeBits *createTypeFlags()
- {
- static TypeBits b[TYPE_MAX_ENUM];
- TypeBits one = TypeBits(1);
- b[INVALID_ID] = one << INVALID_ID;
- b[OBJECT_ID] = one << OBJECT_ID;
- b[DATA_ID] = (one << DATA_ID) | b[OBJECT_ID];
- b[MODULE_ID] = (one << MODULE_ID) | b[OBJECT_ID];
- // Filesystem.
- b[FILESYSTEM_FILE_ID] = (one << FILESYSTEM_FILE_ID) | b[OBJECT_ID];
- b[FILESYSTEM_DROPPED_FILE_ID] = (one << FILESYSTEM_DROPPED_FILE_ID) | b[FILESYSTEM_FILE_ID];
- b[FILESYSTEM_FILE_DATA_ID] = (one << FILESYSTEM_FILE_DATA_ID) | b[DATA_ID];
- b[FONT_GLYPH_DATA_ID] = (one << FONT_GLYPH_DATA_ID) | b[DATA_ID];
- b[FONT_RASTERIZER_ID] = (one << FONT_RASTERIZER_ID) | b[OBJECT_ID];
- // Graphics.
- b[GRAPHICS_DRAWABLE_ID] = (one << GRAPHICS_DRAWABLE_ID) | b[OBJECT_ID];
- b[GRAPHICS_TEXTURE_ID] = (one << GRAPHICS_TEXTURE_ID) | b[GRAPHICS_DRAWABLE_ID];
- b[GRAPHICS_IMAGE_ID] = (one << GRAPHICS_IMAGE_ID) | b[GRAPHICS_TEXTURE_ID];
- b[GRAPHICS_QUAD_ID] = (one << GRAPHICS_QUAD_ID) | b[OBJECT_ID];
- b[GRAPHICS_FONT_ID] = (one << GRAPHICS_FONT_ID) | b[OBJECT_ID];
- b[GRAPHICS_PARTICLE_SYSTEM_ID] = (one << GRAPHICS_PARTICLE_SYSTEM_ID) | b[GRAPHICS_DRAWABLE_ID];
- b[GRAPHICS_SPRITE_BATCH_ID] = (one << GRAPHICS_SPRITE_BATCH_ID) | b[GRAPHICS_DRAWABLE_ID];
- b[GRAPHICS_CANVAS_ID] = (one << GRAPHICS_CANVAS_ID) | b[GRAPHICS_TEXTURE_ID];
- b[GRAPHICS_SHADER_ID] = (one << GRAPHICS_SHADER_ID) | b[OBJECT_ID];
- b[GRAPHICS_MESH_ID] = (one << GRAPHICS_MESH_ID) | b[GRAPHICS_DRAWABLE_ID];
- b[GRAPHICS_TEXT_ID] = (one << GRAPHICS_TEXT_ID) | b[GRAPHICS_DRAWABLE_ID];
- // Image.
- b[IMAGE_IMAGE_DATA_ID] = (one << IMAGE_IMAGE_DATA_ID) | b[DATA_ID];
- b[IMAGE_COMPRESSED_DATA_ID] = (one << IMAGE_COMPRESSED_DATA_ID) | b[DATA_ID];
- // Joystick.
- b[JOYSTICK_JOYSTICK_ID] = (one << JOYSTICK_JOYSTICK_ID) | b[OBJECT_ID];
- // Math.
- b[MATH_RANDOM_GENERATOR_ID] = (one << MATH_RANDOM_GENERATOR_ID) | b[OBJECT_ID];
- b[MATH_BEZIER_CURVE_ID] = (one << MATH_BEZIER_CURVE_ID) | b[OBJECT_ID];
- // Audio.
- b[AUDIO_SOURCE_ID] = (one << AUDIO_SOURCE_ID) | b[OBJECT_ID];
- // Sound.
- b[SOUND_SOUND_DATA_ID] = (one << SOUND_SOUND_DATA_ID) | b[DATA_ID];
- b[SOUND_DECODER_ID] = one << SOUND_DECODER_ID;
- // Mouse.
- b[MOUSE_CURSOR_ID] = (one << MOUSE_CURSOR_ID) | b[OBJECT_ID];
- // Physics.
- b[PHYSICS_WORLD_ID] = (one << PHYSICS_WORLD_ID) | b[OBJECT_ID];
- b[PHYSICS_CONTACT_ID] = (one << PHYSICS_CONTACT_ID) | b[OBJECT_ID];
- b[PHYSICS_BODY_ID] = (one << PHYSICS_BODY_ID) | b[OBJECT_ID];
- b[PHYSICS_FIXTURE_ID] = (one << PHYSICS_FIXTURE_ID) | b[OBJECT_ID];
- b[PHYSICS_SHAPE_ID] = (one << PHYSICS_SHAPE_ID) | b[OBJECT_ID];
- b[PHYSICS_CIRCLE_SHAPE_ID] = (one << PHYSICS_CIRCLE_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
- b[PHYSICS_POLYGON_SHAPE_ID] = (one << PHYSICS_POLYGON_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
- b[PHYSICS_EDGE_SHAPE_ID] = (one << PHYSICS_EDGE_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
- b[PHYSICS_CHAIN_SHAPE_ID] = (one << PHYSICS_CHAIN_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
- b[PHYSICS_JOINT_ID] = (one << PHYSICS_JOINT_ID) | b[OBJECT_ID];
- b[PHYSICS_MOUSE_JOINT_ID] = (one << PHYSICS_MOUSE_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_DISTANCE_JOINT_ID] = (one << PHYSICS_DISTANCE_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_PRISMATIC_JOINT_ID] = (one << PHYSICS_PRISMATIC_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_REVOLUTE_JOINT_ID] = (one << PHYSICS_REVOLUTE_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_PULLEY_JOINT_ID] = (one << PHYSICS_PULLEY_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_GEAR_JOINT_ID] = (one << PHYSICS_GEAR_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_FRICTION_JOINT_ID] = (one << PHYSICS_FRICTION_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_WELD_JOINT_ID] = (one << PHYSICS_WELD_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_ROPE_JOINT_ID] = (one << PHYSICS_ROPE_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_WHEEL_JOINT_ID] = (one << PHYSICS_WHEEL_JOINT_ID) | b[PHYSICS_JOINT_ID];
- b[PHYSICS_MOTOR_JOINT_ID] = (one << PHYSICS_MOTOR_JOINT_ID) | b[PHYSICS_JOINT_ID];
- // Thread.
- b[THREAD_THREAD_ID] = (one << THREAD_THREAD_ID) | b[OBJECT_ID];
- b[THREAD_CHANNEL_ID] = (one << THREAD_CHANNEL_ID) | b[OBJECT_ID];
- // Modules.
- b[MODULE_FILESYSTEM_ID] = (one << MODULE_FILESYSTEM_ID) | b[MODULE_ID];
- b[MODULE_GRAPHICS_ID] = (one << MODULE_GRAPHICS_ID) | b[MODULE_ID];
- b[MODULE_IMAGE_ID] = (one << MODULE_IMAGE_ID) | b[MODULE_ID];
- b[MODULE_SOUND_ID] = (one << MODULE_SOUND_ID) | b[MODULE_ID];
- return b;
- }
- const TypeBits *typeFlags = createTypeFlags();
- StringMap<Type, TYPE_MAX_ENUM>::Entry typeEntries[] =
- {
- {"Invalid", INVALID_ID},
- {"Object", OBJECT_ID},
- {"Data", DATA_ID},
- {"Module", MODULE_ID},
- // Filesystem
- {"File", FILESYSTEM_FILE_ID},
- {"DroppedFile", FILESYSTEM_DROPPED_FILE_ID},
- {"FileData", FILESYSTEM_FILE_DATA_ID},
- // Font
- {"GlyphData", FONT_GLYPH_DATA_ID},
- {"Rasterizer", FONT_RASTERIZER_ID},
- // Graphics
- {"Drawable", GRAPHICS_DRAWABLE_ID},
- {"Texture", GRAPHICS_TEXTURE_ID},
- {"Image", GRAPHICS_IMAGE_ID},
- {"Quad", GRAPHICS_QUAD_ID},
- {"Font", GRAPHICS_FONT_ID},
- {"ParticleSystem", GRAPHICS_PARTICLE_SYSTEM_ID},
- {"SpriteBatch", GRAPHICS_SPRITE_BATCH_ID},
- {"Canvas", GRAPHICS_CANVAS_ID},
- {"Shader", GRAPHICS_SHADER_ID},
- {"Mesh", GRAPHICS_MESH_ID},
- {"Text", GRAPHICS_TEXT_ID},
- // Image
- {"ImageData", IMAGE_IMAGE_DATA_ID},
- {"CompressedData", IMAGE_COMPRESSED_DATA_ID},
- // Joystick
- {"Joystick", JOYSTICK_JOYSTICK_ID},
- // Math
- {"RandomGenerator", MATH_RANDOM_GENERATOR_ID},
- {"BezierCurve", MATH_BEZIER_CURVE_ID},
- // Audio
- {"Source", AUDIO_SOURCE_ID},
- // Sound
- {"SoundData", SOUND_SOUND_DATA_ID},
- {"Decoder", SOUND_DECODER_ID},
- // Mouse
- {"Cursor", MOUSE_CURSOR_ID},
- // Physics
- {"World", PHYSICS_WORLD_ID},
- {"Contact", PHYSICS_CONTACT_ID},
- {"Body", PHYSICS_BODY_ID},
- {"Fixture", PHYSICS_FIXTURE_ID},
- {"Shape", PHYSICS_SHAPE_ID},
- {"CircleShape", PHYSICS_CIRCLE_SHAPE_ID},
- {"PolygonShape", PHYSICS_POLYGON_SHAPE_ID},
- {"EdgeShape", PHYSICS_EDGE_SHAPE_ID},
- {"ChainShape", PHYSICS_CHAIN_SHAPE_ID},
- {"Joint", PHYSICS_JOINT_ID},
- {"MouseJoint", PHYSICS_MOUSE_JOINT_ID},
- {"DistanceJoint", PHYSICS_DISTANCE_JOINT_ID},
- {"PrismaticJoint", PHYSICS_PRISMATIC_JOINT_ID},
- {"RevoluteJoint", PHYSICS_REVOLUTE_JOINT_ID},
- {"PulleyJoint", PHYSICS_PULLEY_JOINT_ID},
- {"GearJoint", PHYSICS_GEAR_JOINT_ID},
- {"FrictionJoint", PHYSICS_FRICTION_JOINT_ID},
- {"WeldJoint", PHYSICS_WELD_JOINT_ID},
- {"RopeJoint", PHYSICS_ROPE_JOINT_ID},
- {"WheelJoint", PHYSICS_WHEEL_JOINT_ID},
- {"MotorJoint", PHYSICS_MOTOR_JOINT_ID},
- // Thread
- {"Thread", THREAD_THREAD_ID},
- {"Channel", THREAD_CHANNEL_ID},
- // The modules themselves. Only add abstracted modules here.
- {"filesystem", MODULE_FILESYSTEM_ID},
- {"graphics", MODULE_GRAPHICS_ID},
- {"image", MODULE_IMAGE_ID},
- {"sound", MODULE_SOUND_ID},
- };
- StringMap<Type, TYPE_MAX_ENUM> types(typeEntries, sizeof(typeEntries));
- bool getType(const char *in, love::Type &out)
- {
- return types.find(in, out);
- }
- bool getType(love::Type in, const char *&out)
- {
- return types.find(in, out);
- }
- } // love
|