types.cpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. /**
  2. * Copyright (c) 2006-2015 LOVE Development Team
  3. *
  4. * This software is provided 'as-is', without any express or implied
  5. * warranty. In no event will the authors be held liable for any damages
  6. * arising from the use of this software.
  7. *
  8. * Permission is granted to anyone to use this software for any purpose,
  9. * including commercial applications, and to alter it and redistribute it
  10. * freely, subject to the following restrictions:
  11. *
  12. * 1. The origin of this software must not be misrepresented; you must not
  13. * claim that you wrote the original software. If you use this software
  14. * in a product, an acknowledgment in the product documentation would be
  15. * appreciated but is not required.
  16. * 2. Altered source versions must be plainly marked as such, and must not be
  17. * misrepresented as being the original software.
  18. * 3. This notice may not be removed or altered from any source distribution.
  19. **/
  20. #include "types.h"
  21. #include "StringMap.h"
  22. namespace love
  23. {
  24. static const TypeBits *createTypeFlags()
  25. {
  26. static TypeBits b[TYPE_MAX_ENUM];
  27. TypeBits one = TypeBits(1);
  28. b[INVALID_ID] = one << INVALID_ID;
  29. b[OBJECT_ID] = one << OBJECT_ID;
  30. b[DATA_ID] = (one << DATA_ID) | b[OBJECT_ID];
  31. b[MODULE_ID] = (one << MODULE_ID) | b[OBJECT_ID];
  32. // Filesystem.
  33. b[FILESYSTEM_FILE_ID] = (one << FILESYSTEM_FILE_ID) | b[OBJECT_ID];
  34. b[FILESYSTEM_DROPPED_FILE_ID] = (one << FILESYSTEM_DROPPED_FILE_ID) | b[FILESYSTEM_FILE_ID];
  35. b[FILESYSTEM_FILE_DATA_ID] = (one << FILESYSTEM_FILE_DATA_ID) | b[DATA_ID];
  36. b[FONT_GLYPH_DATA_ID] = (one << FONT_GLYPH_DATA_ID) | b[DATA_ID];
  37. b[FONT_RASTERIZER_ID] = (one << FONT_RASTERIZER_ID) | b[OBJECT_ID];
  38. // Graphics.
  39. b[GRAPHICS_DRAWABLE_ID] = (one << GRAPHICS_DRAWABLE_ID) | b[OBJECT_ID];
  40. b[GRAPHICS_TEXTURE_ID] = (one << GRAPHICS_TEXTURE_ID) | b[GRAPHICS_DRAWABLE_ID];
  41. b[GRAPHICS_IMAGE_ID] = (one << GRAPHICS_IMAGE_ID) | b[GRAPHICS_TEXTURE_ID];
  42. b[GRAPHICS_QUAD_ID] = (one << GRAPHICS_QUAD_ID) | b[OBJECT_ID];
  43. b[GRAPHICS_FONT_ID] = (one << GRAPHICS_FONT_ID) | b[OBJECT_ID];
  44. b[GRAPHICS_PARTICLE_SYSTEM_ID] = (one << GRAPHICS_PARTICLE_SYSTEM_ID) | b[GRAPHICS_DRAWABLE_ID];
  45. b[GRAPHICS_SPRITE_BATCH_ID] = (one << GRAPHICS_SPRITE_BATCH_ID) | b[GRAPHICS_DRAWABLE_ID];
  46. b[GRAPHICS_CANVAS_ID] = (one << GRAPHICS_CANVAS_ID) | b[GRAPHICS_TEXTURE_ID];
  47. b[GRAPHICS_SHADER_ID] = (one << GRAPHICS_SHADER_ID) | b[OBJECT_ID];
  48. b[GRAPHICS_MESH_ID] = (one << GRAPHICS_MESH_ID) | b[GRAPHICS_DRAWABLE_ID];
  49. b[GRAPHICS_TEXT_ID] = (one << GRAPHICS_TEXT_ID) | b[GRAPHICS_DRAWABLE_ID];
  50. // Image.
  51. b[IMAGE_IMAGE_DATA_ID] = (one << IMAGE_IMAGE_DATA_ID) | b[DATA_ID];
  52. b[IMAGE_COMPRESSED_DATA_ID] = (one << IMAGE_COMPRESSED_DATA_ID) | b[DATA_ID];
  53. // Joystick.
  54. b[JOYSTICK_JOYSTICK_ID] = (one << JOYSTICK_JOYSTICK_ID) | b[OBJECT_ID];
  55. // Math.
  56. b[MATH_RANDOM_GENERATOR_ID] = (one << MATH_RANDOM_GENERATOR_ID) | b[OBJECT_ID];
  57. b[MATH_BEZIER_CURVE_ID] = (one << MATH_BEZIER_CURVE_ID) | b[OBJECT_ID];
  58. // Audio.
  59. b[AUDIO_SOURCE_ID] = (one << AUDIO_SOURCE_ID) | b[OBJECT_ID];
  60. // Sound.
  61. b[SOUND_SOUND_DATA_ID] = (one << SOUND_SOUND_DATA_ID) | b[DATA_ID];
  62. b[SOUND_DECODER_ID] = one << SOUND_DECODER_ID;
  63. // Mouse.
  64. b[MOUSE_CURSOR_ID] = (one << MOUSE_CURSOR_ID) | b[OBJECT_ID];
  65. // Physics.
  66. b[PHYSICS_WORLD_ID] = (one << PHYSICS_WORLD_ID) | b[OBJECT_ID];
  67. b[PHYSICS_CONTACT_ID] = (one << PHYSICS_CONTACT_ID) | b[OBJECT_ID];
  68. b[PHYSICS_BODY_ID] = (one << PHYSICS_BODY_ID) | b[OBJECT_ID];
  69. b[PHYSICS_FIXTURE_ID] = (one << PHYSICS_FIXTURE_ID) | b[OBJECT_ID];
  70. b[PHYSICS_SHAPE_ID] = (one << PHYSICS_SHAPE_ID) | b[OBJECT_ID];
  71. b[PHYSICS_CIRCLE_SHAPE_ID] = (one << PHYSICS_CIRCLE_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
  72. b[PHYSICS_POLYGON_SHAPE_ID] = (one << PHYSICS_POLYGON_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
  73. b[PHYSICS_EDGE_SHAPE_ID] = (one << PHYSICS_EDGE_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
  74. b[PHYSICS_CHAIN_SHAPE_ID] = (one << PHYSICS_CHAIN_SHAPE_ID) | b[PHYSICS_SHAPE_ID];
  75. b[PHYSICS_JOINT_ID] = (one << PHYSICS_JOINT_ID) | b[OBJECT_ID];
  76. b[PHYSICS_MOUSE_JOINT_ID] = (one << PHYSICS_MOUSE_JOINT_ID) | b[PHYSICS_JOINT_ID];
  77. b[PHYSICS_DISTANCE_JOINT_ID] = (one << PHYSICS_DISTANCE_JOINT_ID) | b[PHYSICS_JOINT_ID];
  78. b[PHYSICS_PRISMATIC_JOINT_ID] = (one << PHYSICS_PRISMATIC_JOINT_ID) | b[PHYSICS_JOINT_ID];
  79. b[PHYSICS_REVOLUTE_JOINT_ID] = (one << PHYSICS_REVOLUTE_JOINT_ID) | b[PHYSICS_JOINT_ID];
  80. b[PHYSICS_PULLEY_JOINT_ID] = (one << PHYSICS_PULLEY_JOINT_ID) | b[PHYSICS_JOINT_ID];
  81. b[PHYSICS_GEAR_JOINT_ID] = (one << PHYSICS_GEAR_JOINT_ID) | b[PHYSICS_JOINT_ID];
  82. b[PHYSICS_FRICTION_JOINT_ID] = (one << PHYSICS_FRICTION_JOINT_ID) | b[PHYSICS_JOINT_ID];
  83. b[PHYSICS_WELD_JOINT_ID] = (one << PHYSICS_WELD_JOINT_ID) | b[PHYSICS_JOINT_ID];
  84. b[PHYSICS_ROPE_JOINT_ID] = (one << PHYSICS_ROPE_JOINT_ID) | b[PHYSICS_JOINT_ID];
  85. b[PHYSICS_WHEEL_JOINT_ID] = (one << PHYSICS_WHEEL_JOINT_ID) | b[PHYSICS_JOINT_ID];
  86. b[PHYSICS_MOTOR_JOINT_ID] = (one << PHYSICS_MOTOR_JOINT_ID) | b[PHYSICS_JOINT_ID];
  87. // Thread.
  88. b[THREAD_THREAD_ID] = (one << THREAD_THREAD_ID) | b[OBJECT_ID];
  89. b[THREAD_CHANNEL_ID] = (one << THREAD_CHANNEL_ID) | b[OBJECT_ID];
  90. // Modules.
  91. b[MODULE_FILESYSTEM_ID] = (one << MODULE_FILESYSTEM_ID) | b[MODULE_ID];
  92. b[MODULE_GRAPHICS_ID] = (one << MODULE_GRAPHICS_ID) | b[MODULE_ID];
  93. b[MODULE_IMAGE_ID] = (one << MODULE_IMAGE_ID) | b[MODULE_ID];
  94. b[MODULE_SOUND_ID] = (one << MODULE_SOUND_ID) | b[MODULE_ID];
  95. return b;
  96. }
  97. const TypeBits *typeFlags = createTypeFlags();
  98. StringMap<Type, TYPE_MAX_ENUM>::Entry typeEntries[] =
  99. {
  100. {"Invalid", INVALID_ID},
  101. {"Object", OBJECT_ID},
  102. {"Data", DATA_ID},
  103. {"Module", MODULE_ID},
  104. // Filesystem
  105. {"File", FILESYSTEM_FILE_ID},
  106. {"DroppedFile", FILESYSTEM_DROPPED_FILE_ID},
  107. {"FileData", FILESYSTEM_FILE_DATA_ID},
  108. // Font
  109. {"GlyphData", FONT_GLYPH_DATA_ID},
  110. {"Rasterizer", FONT_RASTERIZER_ID},
  111. // Graphics
  112. {"Drawable", GRAPHICS_DRAWABLE_ID},
  113. {"Texture", GRAPHICS_TEXTURE_ID},
  114. {"Image", GRAPHICS_IMAGE_ID},
  115. {"Quad", GRAPHICS_QUAD_ID},
  116. {"Font", GRAPHICS_FONT_ID},
  117. {"ParticleSystem", GRAPHICS_PARTICLE_SYSTEM_ID},
  118. {"SpriteBatch", GRAPHICS_SPRITE_BATCH_ID},
  119. {"Canvas", GRAPHICS_CANVAS_ID},
  120. {"Shader", GRAPHICS_SHADER_ID},
  121. {"Mesh", GRAPHICS_MESH_ID},
  122. {"Text", GRAPHICS_TEXT_ID},
  123. // Image
  124. {"ImageData", IMAGE_IMAGE_DATA_ID},
  125. {"CompressedData", IMAGE_COMPRESSED_DATA_ID},
  126. // Joystick
  127. {"Joystick", JOYSTICK_JOYSTICK_ID},
  128. // Math
  129. {"RandomGenerator", MATH_RANDOM_GENERATOR_ID},
  130. {"BezierCurve", MATH_BEZIER_CURVE_ID},
  131. // Audio
  132. {"Source", AUDIO_SOURCE_ID},
  133. // Sound
  134. {"SoundData", SOUND_SOUND_DATA_ID},
  135. {"Decoder", SOUND_DECODER_ID},
  136. // Mouse
  137. {"Cursor", MOUSE_CURSOR_ID},
  138. // Physics
  139. {"World", PHYSICS_WORLD_ID},
  140. {"Contact", PHYSICS_CONTACT_ID},
  141. {"Body", PHYSICS_BODY_ID},
  142. {"Fixture", PHYSICS_FIXTURE_ID},
  143. {"Shape", PHYSICS_SHAPE_ID},
  144. {"CircleShape", PHYSICS_CIRCLE_SHAPE_ID},
  145. {"PolygonShape", PHYSICS_POLYGON_SHAPE_ID},
  146. {"EdgeShape", PHYSICS_EDGE_SHAPE_ID},
  147. {"ChainShape", PHYSICS_CHAIN_SHAPE_ID},
  148. {"Joint", PHYSICS_JOINT_ID},
  149. {"MouseJoint", PHYSICS_MOUSE_JOINT_ID},
  150. {"DistanceJoint", PHYSICS_DISTANCE_JOINT_ID},
  151. {"PrismaticJoint", PHYSICS_PRISMATIC_JOINT_ID},
  152. {"RevoluteJoint", PHYSICS_REVOLUTE_JOINT_ID},
  153. {"PulleyJoint", PHYSICS_PULLEY_JOINT_ID},
  154. {"GearJoint", PHYSICS_GEAR_JOINT_ID},
  155. {"FrictionJoint", PHYSICS_FRICTION_JOINT_ID},
  156. {"WeldJoint", PHYSICS_WELD_JOINT_ID},
  157. {"RopeJoint", PHYSICS_ROPE_JOINT_ID},
  158. {"WheelJoint", PHYSICS_WHEEL_JOINT_ID},
  159. {"MotorJoint", PHYSICS_MOTOR_JOINT_ID},
  160. // Thread
  161. {"Thread", THREAD_THREAD_ID},
  162. {"Channel", THREAD_CHANNEL_ID},
  163. // The modules themselves. Only add abstracted modules here.
  164. {"filesystem", MODULE_FILESYSTEM_ID},
  165. {"graphics", MODULE_GRAPHICS_ID},
  166. {"image", MODULE_IMAGE_ID},
  167. {"sound", MODULE_SOUND_ID},
  168. };
  169. StringMap<Type, TYPE_MAX_ENUM> types(typeEntries, sizeof(typeEntries));
  170. bool getType(const char *in, love::Type &out)
  171. {
  172. return types.find(in, out);
  173. }
  174. bool getType(love::Type in, const char *&out)
  175. {
  176. return types.find(in, out);
  177. }
  178. } // love