mf_classic_dict.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <storage/storage.h>
  4. #include <lib/flipper_format/flipper_format.h>
  5. #include <lib/toolbox/stream/file_stream.h>
  6. #include <lib/toolbox/stream/buffered_file_stream.h>
  7. typedef enum {
  8. MfClassicDictTypeUser,
  9. MfClassicDictTypeFlipper,
  10. MfClassicDictTypeUnitTest,
  11. } MfClassicDictType;
  12. typedef struct MfClassicDict MfClassicDict;
  13. bool mf_classic_dict_check_presence(MfClassicDictType dict_type);
  14. /** Allocate MfClassicDict instance
  15. *
  16. * @param[in] dict_type The dictionary type
  17. *
  18. * @return MfClassicDict instance
  19. */
  20. MfClassicDict* mf_classic_dict_alloc(MfClassicDictType dict_type);
  21. /** Free MfClassicDict instance
  22. *
  23. * @param dict MfClassicDict instance
  24. */
  25. void mf_classic_dict_free(MfClassicDict* dict);
  26. /** Get total keys count
  27. *
  28. * @param dict MfClassicDict instance
  29. *
  30. * @return total keys count
  31. */
  32. uint32_t mf_classic_dict_get_total_keys(MfClassicDict* dict);
  33. /** Rewind to the beginning
  34. *
  35. * @param dict MfClassicDict instance
  36. *
  37. * @return true on success
  38. */
  39. bool mf_classic_dict_rewind(MfClassicDict* dict);
  40. bool mf_classic_dict_is_key_present(MfClassicDict* dict, uint8_t* key);
  41. bool mf_classic_dict_is_key_present_str(MfClassicDict* dict, FuriString* key);
  42. bool mf_classic_dict_get_next_key(MfClassicDict* dict, uint64_t* key);
  43. bool mf_classic_dict_get_next_key_str(MfClassicDict* dict, FuriString* key);
  44. /** Get key at target offset as uint64_t
  45. *
  46. * @param dict MfClassicDict instance
  47. * @param[out] key Pointer to the uint64_t key
  48. * @param[in] target Target offset from current position
  49. *
  50. * @return true on success
  51. */
  52. bool mf_classic_dict_get_key_at_index(MfClassicDict* dict, uint64_t* key, uint32_t target);
  53. /** Get key at target offset as string_t
  54. *
  55. * @param dict MfClassicDict instance
  56. * @param[out] key Found key destination buffer
  57. * @param[in] target Target offset from current position
  58. *
  59. * @return true on success
  60. */
  61. bool mf_classic_dict_get_key_at_index_str(MfClassicDict* dict, FuriString* key, uint32_t target);
  62. bool mf_classic_dict_add_key(MfClassicDict* dict, uint8_t* key);
  63. /** Add string representation of the key
  64. *
  65. * @param dict MfClassicDict instance
  66. * @param[in] key String representation of the key
  67. *
  68. * @return true on success
  69. */
  70. bool mf_classic_dict_add_key_str(MfClassicDict* dict, FuriString* key);
  71. bool mf_classic_dict_find_index(MfClassicDict* dict, uint8_t* key, uint32_t* target);
  72. bool mf_classic_dict_find_index_str(MfClassicDict* dict, FuriString* key, uint32_t* target);
  73. /** Delete key at target offset
  74. *
  75. * @param dict MfClassicDict instance
  76. * @param[in] target Target offset from current position
  77. *
  78. * @return true on success
  79. */
  80. bool mf_classic_dict_delete_index(MfClassicDict* dict, uint32_t target);