cacheobject.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. class RecipeCacheData
  2. {
  3. int m_Mask;
  4. int m_BitCount;
  5. void RecipeCacheData(int mask)
  6. {
  7. SetMask(mask);
  8. }
  9. int GetMask()
  10. {
  11. return m_Mask;
  12. }
  13. int GetBitCount()
  14. {
  15. return m_BitCount;
  16. }
  17. void SetMask(int mask)
  18. {
  19. m_Mask = mask;
  20. m_BitCount = Math.GetNumberOfSetBits(mask);
  21. }
  22. }
  23. class CacheObject
  24. {
  25. ref map<int, ref RecipeCacheData> m_Recipes;
  26. ref array<int> m_RecipeIDs;
  27. //RecipeCacheData data;
  28. void CacheObject()
  29. {
  30. m_Recipes = new map<int, ref RecipeCacheData>;
  31. m_RecipeIDs = new array<int>;
  32. }
  33. bool AddRecipe(int recipe_id, int mask)
  34. {
  35. RecipeCacheData data = m_Recipes.Get(recipe_id);
  36. if(data)
  37. {
  38. UpdateMask(recipe_id, mask);
  39. }
  40. else
  41. {
  42. m_Recipes.Insert(recipe_id, new RecipeCacheData(mask));
  43. m_RecipeIDs.Insert(recipe_id);
  44. }
  45. return true;
  46. }
  47. void UpdateMask(int recipe_id, int mask)
  48. {
  49. RecipeCacheData data = m_Recipes.Get(recipe_id);
  50. data.SetMask(data.GetMask() | mask);
  51. }
  52. int GetNumberOfRecipes()
  53. {
  54. return m_Recipes.Count();
  55. }
  56. array<int> GetRecipes()
  57. {
  58. return m_RecipeIDs;
  59. }
  60. bool IsContainRecipe(int recipe_id)
  61. {
  62. return m_Recipes.Contains(recipe_id);
  63. }
  64. int GetMaskByRecipeID(int recipe_id)
  65. {
  66. RecipeCacheData cache_data = m_Recipes.Get(recipe_id);
  67. if(cache_data)
  68. return cache_data.GetMask();
  69. return 0;
  70. }
  71. int GetBitCountByRecipeID(int recipe_id)
  72. {
  73. RecipeCacheData cache_data = m_Recipes.Get(recipe_id);
  74. if(cache_data)
  75. return cache_data.GetBitCount();
  76. return 0;
  77. }
  78. void DebugPrint()
  79. {
  80. for(int i = 0; i < m_Recipes.Count();i++)
  81. {
  82. Print("recipeID:"+m_Recipes.GetKey(i).ToString());
  83. Print("mask:"+m_Recipes.GetElement(i).m_Mask.ToString());
  84. Print("m_BitCount:"+m_Recipes.GetElement(i).m_BitCount.ToString());
  85. }
  86. }
  87. }