InitFile.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. #include "InitFile.h"
  2. #include "File.h"
  3. #include "Text.h"
  4. using namespace Framework;
  5. // Contents of the InitFile class from InitFile.h
  6. // Constructor
  7. InitFile::InitFile()
  8. : ReferenceCounter(),
  9. pfad(new Text()),
  10. name(new RCArray<Text>()),
  11. wert(new RCArray<Text>())
  12. {}
  13. InitFile::InitFile(Text* pfad)
  14. : ReferenceCounter(),
  15. pfad(new Text()),
  16. name(new RCArray<Text>()),
  17. wert(new RCArray<Text>())
  18. {
  19. setPfad(pfad);
  20. }
  21. InitFile::InitFile(const char* pfad)
  22. : ReferenceCounter(),
  23. pfad(new Text()),
  24. name(new RCArray<Text>()),
  25. wert(new RCArray<Text>())
  26. {
  27. setPfad(pfad);
  28. }
  29. // Destructor
  30. InitFile::~InitFile()
  31. {
  32. pfad->release();
  33. name->release();
  34. wert->release();
  35. }
  36. // non-constant
  37. void InitFile::setPfad(Text* pfad)
  38. {
  39. this->pfad->setText(*pfad);
  40. pfad->release();
  41. }
  42. void InitFile::setPfad(const char* pfad)
  43. {
  44. this->pfad->setText(pfad);
  45. }
  46. bool InitFile::load()
  47. {
  48. File* dat = new File();
  49. dat->setFile(pfad->getText());
  50. if (!dat->open(File::Style::readAll))
  51. {
  52. dat->release();
  53. return 0;
  54. }
  55. removeAlle();
  56. Text* zeile = dat->readLine();
  57. while (zeile)
  58. {
  59. zeile->remove("\r\n");
  60. zeile->remove("\n");
  61. Text* n = zeile->getTeilText(0, zeile->positionOf('='));
  62. Text* w = zeile->getTeilText(zeile->positionOf('=') + 1);
  63. name->add(n);
  64. wert->add(w);
  65. zeile->release();
  66. zeile = dat->readLine();
  67. }
  68. dat->close();
  69. dat->release();
  70. return 1;
  71. }
  72. bool InitFile::addValue(Text* name, Text* wert)
  73. {
  74. if (!valueExists(name->getText()))
  75. {
  76. this->name->add(new Text(name->getText()));
  77. this->wert->add(new Text(wert->getText()));
  78. name->release();
  79. wert->release();
  80. return 1;
  81. }
  82. name->release();
  83. wert->release();
  84. return 0;
  85. }
  86. bool InitFile::addValue(const char* name, const char* wert)
  87. {
  88. return addValue(new Text(name), new Text(wert));
  89. }
  90. bool InitFile::setValue(Text* name, Text* wert)
  91. {
  92. if (!valueExists(name->getText()))
  93. {
  94. name->release();
  95. wert->release();
  96. return 0;
  97. }
  98. auto n = this->name->begin();
  99. for (auto v = this->wert->begin(); v; v++, n++)
  100. {
  101. if (n->isEqual(name->getText()))
  102. {
  103. v->setText(wert->getText());
  104. name->release();
  105. wert->release();
  106. return 1;
  107. }
  108. }
  109. name->release();
  110. wert->release();
  111. return 0;
  112. }
  113. bool InitFile::setValue(const char* name, const char* wert)
  114. {
  115. return setValue(new Text(name), new Text(wert));
  116. }
  117. bool InitFile::setValue(int num, Text* wert)
  118. {
  119. bool result = setValue(num, wert->getText());
  120. wert->release();
  121. return result;
  122. }
  123. bool InitFile::setValue(int num, const char* wert)
  124. {
  125. if (num >= name->getEntryCount()) return 0;
  126. this->wert->z(num)->setText(wert);
  127. return 1;
  128. }
  129. bool InitFile::removeValue(Text* name)
  130. {
  131. bool result = removeValue(name->getText());
  132. name->release();
  133. return result;
  134. }
  135. bool InitFile::removeValue(const char* name)
  136. {
  137. if (!valueExists(name)) return 0;
  138. for (int i = 0; i < wert->getEntryCount(); ++i)
  139. {
  140. if (this->name->z(i)->isEqual(name))
  141. {
  142. this->name->remove(i);
  143. this->wert->remove(i);
  144. return 1;
  145. }
  146. }
  147. return 0;
  148. }
  149. bool InitFile::removeValue(int num)
  150. {
  151. if (num >= wert->getEntryCount()) return 0;
  152. this->name->remove(num);
  153. this->wert->remove(num);
  154. return 1;
  155. }
  156. void InitFile::removeAlle()
  157. {
  158. while (wert->getEntryCount() > 0)
  159. {
  160. this->name->remove(0);
  161. this->wert->remove(0);
  162. }
  163. }
  164. bool InitFile::save()
  165. {
  166. File* dat = new File();
  167. dat->setFile(pfad->getText());
  168. if (!dat->exists()) dat->create();
  169. if (!dat->open(File::Style::schreiben))
  170. {
  171. dat->release();
  172. return 0;
  173. }
  174. auto n = name->begin();
  175. for (auto v = wert->begin(); v; v++, n++)
  176. {
  177. Text* zeile = new Text("");
  178. zeile->append(n->getText());
  179. zeile->append("=");
  180. zeile->append(v->getText());
  181. zeile->append("\n");
  182. dat->write(zeile->getText(), zeile->getLength());
  183. zeile->release();
  184. }
  185. dat->close();
  186. dat->release();
  187. return 1;
  188. }
  189. // constant
  190. int InitFile::getValueCount() const
  191. {
  192. return name->getEntryCount();
  193. }
  194. bool InitFile::valueExists(Text* name)
  195. {
  196. bool result = valueExists(name->getText());
  197. name->release();
  198. return result;
  199. }
  200. bool InitFile::valueExists(const char* name)
  201. {
  202. for (Text* n : *this->name)
  203. {
  204. if (n->isEqual(name)) return 1;
  205. }
  206. return 0;
  207. }
  208. int InitFile::getValueNumber(Text* name)
  209. {
  210. int result = getValueNumber(name->getText());
  211. name->release();
  212. return result;
  213. }
  214. int InitFile::getValueNumber(const char* name)
  215. {
  216. int i = 0;
  217. for (Text* n : *this->name)
  218. {
  219. if (n->isEqual(name)) return i;
  220. }
  221. return -1;
  222. }
  223. Text* InitFile::getValue(Text* name)
  224. {
  225. Text* result = getValue(name->getText());
  226. name->release();
  227. return result;
  228. }
  229. Text* InitFile::getValue(const char* name)
  230. {
  231. auto v = wert->begin();
  232. for (auto n = this->name->begin(); n; n++, v++)
  233. {
  234. if (n->isEqual(name)) return dynamic_cast<Text*>(v->getThis());
  235. }
  236. return 0;
  237. }
  238. Text* InitFile::getValue(int num)
  239. {
  240. if (num >= name->getEntryCount()) return 0;
  241. return wert->get(num);
  242. }
  243. Text* InitFile::zValue(Text* name)
  244. {
  245. Text* result = zValue(name->getText());
  246. name->release();
  247. return result;
  248. }
  249. Text* InitFile::zValue(const char* name)
  250. {
  251. auto v = wert->begin();
  252. for (auto n = this->name->begin(); n; n++, v++)
  253. {
  254. if (n->isEqual(name)) return v;
  255. }
  256. return 0;
  257. }
  258. Text* InitFile::zValue(int num)
  259. {
  260. if (num >= wert->getEntryCount()) return 0;
  261. return wert->z(num);
  262. }
  263. Text* InitFile::getName(int num)
  264. {
  265. if (num >= name->getEntryCount()) return 0;
  266. return name->get(num);
  267. }
  268. Text* InitFile::zName(int num)
  269. {
  270. if (num >= name->getEntryCount()) return 0;
  271. return name->z(num);
  272. }
  273. Text* InitFile::getPfad() const
  274. {
  275. return dynamic_cast<Text*>(pfad->getThis());
  276. }
  277. Text* InitFile::zPfad() const
  278. {
  279. return pfad;
  280. }