filesystem.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. #include "Crown.h"
  2. #include "OS.h"
  3. #include <iostream>
  4. #include <cstring>
  5. #include <stdio.h>
  6. #include <pthread.h>
  7. #include <stdlib.h>
  8. #include <time.h>
  9. #include <unistd.h>
  10. using namespace Crown;
  11. class ResourceLoader
  12. {
  13. public:
  14. ResourceLoader() : mDone(false), mProcessed(0)
  15. {
  16. }
  17. ~ResourceLoader()
  18. {
  19. }
  20. void Load(char* name)
  21. {
  22. mResourceQueue.Append(name);
  23. mProcessed = 0;
  24. }
  25. void Flush()
  26. {
  27. pthread_create(&thread_id, NULL, &(ResourceLoader::ThreadStarter), this);
  28. }
  29. void LoadAll()
  30. {
  31. for (int i = 0; i < mResourceQueue.GetSize(); i++)
  32. {
  33. GetFilesystem()->Close(GetFilesystem()->OpenStream(mResourceQueue[i], SOM_READ));
  34. mProcessed++;
  35. sleep(1);
  36. }
  37. mResourceQueue.Clear();
  38. mDone = true;
  39. }
  40. bool IsDone() const { return mDone; }
  41. int GetProcessed() const { return mProcessed; }
  42. int GetPending() const { return mResourceQueue.GetSize(); }
  43. private:
  44. volatile bool mDone;
  45. volatile int mProcessed;
  46. pthread_t thread_id;
  47. List<char*> mResourceQueue;
  48. static void* ThreadStarter(void* instance)
  49. {
  50. reinterpret_cast<ResourceLoader*>(instance)->LoadAll();
  51. }
  52. };
  53. int main()
  54. {
  55. Device* device = GetDevice();
  56. Filesystem* fs = GetFilesystem();
  57. fs->Init(Str::EMPTY, Str::EMPTY);
  58. fs->PrintReport();
  59. char path[256];
  60. // do
  61. // {
  62. // std::cin >> path;
  63. // FilesystemEntry info;
  64. // if (fs->GetInfo(fs->GetRootPath(), path, info))
  65. // {
  66. // info.PrintReport();
  67. // }
  68. // }
  69. // while (strcmp(path, "=exit") != 0);
  70. // do
  71. // {
  72. // std::cin >> path;
  73. // const char* extension = Filesystem::GetExtension(path);
  74. // std::cout << "extension: ";
  75. // printf("%s\n", extension);
  76. // }
  77. // while (strcmp(path, "=exit") != 0);
  78. fs->CreateFile("ciao.txt2");
  79. fs->CreateDir("pippo");
  80. ResourceLoader loader;
  81. loader.Load("res/red_north.tga");
  82. loader.Load("res/red_up.tga");
  83. loader.Load("res/red_down.tga");
  84. loader.Load("res/red_west.tga");
  85. loader.Load("res/red_east.tga");
  86. loader.Load("res/red_south.tga");
  87. loader.Load("res/red_north.tga");
  88. loader.Load("res/red_up.tga");
  89. loader.Load("res/red_down.tga");
  90. loader.Load("res/red_west.tga");
  91. loader.Load("res/red_east.tga");
  92. loader.Load("res/red_south.tga");
  93. loader.Load("res/red_north.tga");
  94. loader.Load("res/red_up.tga");
  95. loader.Load("res/red_down.tga");
  96. loader.Load("res/red_west.tga");
  97. loader.Load("res/red_east.tga");
  98. loader.Load("res/red_south.tga");
  99. loader.Load("res/red_north.tga");
  100. loader.Load("res/red_up.tga");
  101. loader.Load("res/red_down.tga");
  102. loader.Load("res/red_west.tga");
  103. loader.Load("res/red_east.tga");
  104. loader.Load("res/red_south.tga");
  105. loader.Load("res/red_north.tga");
  106. loader.Load("res/red_up.tga");
  107. loader.Load("res/red_down.tga");
  108. loader.Load("res/red_west.tga");
  109. loader.Load("res/red_east.tga");
  110. loader.Load("res/red_south.tga");
  111. loader.Load("res/red_north.tga");
  112. loader.Load("res/red_up.tga");
  113. loader.Load("res/red_down.tga");
  114. loader.Load("res/red_west.tga");
  115. loader.Load("res/red_east.tga");
  116. loader.Load("res/red_south.tga");
  117. loader.Load("res/red_north.tga");
  118. loader.Load("res/red_up.tga");
  119. loader.Load("res/red_down.tga");
  120. loader.Load("res/red_west.tga");
  121. loader.Load("res/red_east.tga");
  122. loader.Load("res/red_south.tga");
  123. loader.Load("res/red_north.tga");
  124. loader.Load("res/red_up.tga");
  125. loader.Load("res/red_down.tga");
  126. loader.Load("res/red_west.tga");
  127. loader.Load("res/red_east.tga");
  128. loader.Load("res/red_south.tga");
  129. loader.Load("res/red_north.tga");
  130. loader.Load("res/red_up.tga");
  131. loader.Load("res/red_down.tga");
  132. loader.Load("res/red_west.tga");
  133. loader.Load("res/red_east.tga");
  134. loader.Load("res/red_south.tga");
  135. loader.Load("res/red_north.tga");
  136. loader.Load("res/red_up.tga");
  137. loader.Load("res/red_down.tga");
  138. loader.Load("res/red_west.tga");
  139. loader.Load("res/red_east.tga");
  140. loader.Load("res/red_south.tga");
  141. loader.Load("res/red_north.tga");
  142. loader.Load("res/red_up.tga");
  143. loader.Load("res/red_down.tga");
  144. loader.Load("res/red_west.tga");
  145. loader.Load("res/red_east.tga");
  146. loader.Load("res/red_south.tga");
  147. loader.Load("res/red_north.tga");
  148. loader.Load("res/red_up.tga");
  149. loader.Load("res/red_down.tga");
  150. loader.Load("res/red_west.tga");
  151. loader.Load("res/red_east.tga");
  152. loader.Load("res/red_south.tga");
  153. loader.Load("res/red_north.tga");
  154. loader.Load("res/red_up.tga");
  155. loader.Load("res/red_down.tga");
  156. loader.Load("res/red_west.tga");
  157. loader.Load("res/red_east.tga");
  158. loader.Load("res/red_south.tga");
  159. loader.Load("res/red_north.tga");
  160. loader.Load("res/red_up.tga");
  161. loader.Load("res/red_down.tga");
  162. loader.Load("res/red_west.tga");
  163. loader.Load("res/red_east.tga");
  164. loader.Load("res/red_south.tga");
  165. loader.Load("res/red_north.tga");
  166. loader.Load("res/red_up.tga");
  167. loader.Load("res/red_down.tga");
  168. loader.Load("res/red_west.tga");
  169. loader.Load("res/red_east.tga");
  170. loader.Load("res/red_south.tga");
  171. int pending = loader.GetPending();
  172. printf("%d\n", pending);
  173. getchar();
  174. loader.Flush();
  175. while (pending != loader.GetProcessed())
  176. {
  177. printf("%d/%d\n", loader.GetProcessed(), pending);
  178. sleep(2);
  179. }
  180. return 0;
  181. }