StringTable.c 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*
  2. * Copyright (C) 2007-2012 Siemens AG
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU Lesser General Public License as published
  6. * by the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU Lesser General Public License for more details.
  13. * GNU Lesser General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /*******************************************************************
  19. *
  20. * @author Daniel.Peintner.EXT@siemens.com
  21. * @version 0.7
  22. * @contact Joerg.Heuer@siemens.com
  23. *
  24. * <p>Code generated by EXIdizer.com</p>
  25. ********************************************************************/
  26. #ifndef STRING_TABLE_C
  27. #define STRING_TABLE_C
  28. #include <string.h>
  29. #include "StringTable.h"
  30. #include "NameTableEntries.h"
  31. #include "ErrorCodes.h"
  32. #ifndef __GNUC__
  33. #pragma warning( disable : 4100 ) /* warning unreferenced parameter 'runtimeTable' */
  34. #endif /* __GNUC__ */
  35. int exiGetUriSize(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable, uint16_t* uriLength) {
  36. *uriLength = prepopulatedTable->len;
  37. return 0;
  38. }
  39. #ifndef __GNUC__
  40. #pragma warning( default : 4100 ) /* warning unreferenced parameter 'runtimeTable' */
  41. #endif /* __GNUC__ */
  42. int exiGetLocalNameSize(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable,
  43. uint16_t uriID, uint16_t* localNameLength) {
  44. *localNameLength = 0;
  45. /* 1. pre-populated entries*/
  46. if (uriID < prepopulatedTable->len) {
  47. (*localNameLength) += prepopulatedTable->localNames[uriID];
  48. } else {
  49. /* range check */
  50. if (uriID >= ( prepopulatedTable->len + runtimeTable->addedUriEntries )) {
  51. return EXI_ERROR_OUT_OF_BOUNDS;
  52. }
  53. }
  54. /* 2. runtime entries */
  55. if (runtimeTable->addedLocalNameEntries > 0 ) {
  56. int i;
  57. for(i=0; i<(runtimeTable->addedUriEntries+runtimeTable->addedLocalNameEntries); i++) {
  58. if ( runtimeTable->namePartitionsEntries[i].namePartitionType == EXI_NAME_PARTITION_LOCALNAME &&
  59. runtimeTable->namePartitionsEntries[i].entry.localNamePartition.uriID == uriID ) {
  60. (*localNameLength)++;
  61. }
  62. }
  63. }
  64. return 0;
  65. }
  66. /* inline */
  67. /*
  68. static int _max(int a, int b) {
  69. return (a > b) ? a : b;
  70. }
  71. */
  72. int exiInitNameTableRuntime(exi_name_table_runtime_t* runtimeTable) {
  73. /*runtimeTable->numberOfUsedCharacters = 0;*/
  74. runtimeTable->addedLocalNameEntries = 0;
  75. runtimeTable->addedUriEntries = 0;
  76. return 0;
  77. }
  78. int exiAddUri(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable) {
  79. /* , char* uri) { */
  80. /*if (runtimeTable->addedUriEntries < EXI_RESERVED_NUMBER_URI_PARTITION_ENTRIES
  81. || runtimeTable->addedUriEntries
  82. < (EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES - _max(
  83. runtimeTable->addedLocalNameEntries,
  84. EXI_RESERVED_NUMBER_LOCALNAME_PARTITION_ENTRIES))) {*/
  85. uint16_t index = runtimeTable->addedUriEntries + runtimeTable->addedLocalNameEntries;
  86. /*int charsIndex = runtimeTable->numberOfUsedCharacters+runtimeTable->addedUriEntries+runtimeTable->addedLocalNameEntries;*/
  87. runtimeTable->namePartitionsEntries[index].namePartitionType = EXI_NAME_PARTITION_URI;
  88. /* strcpy(runtimeTable->characters+charsIndex, uri); */
  89. /*runtimeTable->namePartitionsEntries[index].entry.uriPartition.uri = runtimeTable->characters+charsIndex;*/
  90. runtimeTable->namePartitionsEntries[index].entry.uriPartition.uriID = prepopulatedTable->len + runtimeTable->addedUriEntries;
  91. runtimeTable->addedUriEntries++;
  92. /* runtimeTable->numberOfUsedCharacters += strlen(uri); */
  93. return 0;
  94. /*} else {
  95. return -1;
  96. }*/
  97. }
  98. int exiAddLocalName(exi_name_table_prepopulated_t* prepopulatedTable, exi_name_table_runtime_t* runtimeTable, uint16_t uriID, uint16_t* localNameID) {
  99. /* ,char* localName) { */
  100. /*if (runtimeTable->addedUriEntries < EXI_RESERVED_NUMBER_LOCALNAME_PARTITION_ENTRIES
  101. || runtimeTable->addedLocalNameEntries
  102. < (EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES - _max(
  103. runtimeTable->addedUriEntries,
  104. EXI_RESERVED_NUMBER_URI_PARTITION_ENTRIES))) {*/
  105. uint16_t index = runtimeTable->addedUriEntries + runtimeTable->addedLocalNameEntries;
  106. /*int charsIndex = runtimeTable->numberOfUsedCharacters+runtimeTable->addedUriEntries+runtimeTable->addedLocalNameEntries;*/
  107. /*uint16_t localNameID;*/
  108. int errn = exiGetLocalNameSize(prepopulatedTable, runtimeTable, uriID, localNameID);
  109. if (errn < 0) {
  110. return errn;
  111. }
  112. runtimeTable->namePartitionsEntries[index].namePartitionType = EXI_NAME_PARTITION_LOCALNAME;
  113. /*strcpy(runtimeTable->characters+charsIndex, localName);*/
  114. /*runtimeTable->namePartitionsEntries[index].entry.localNamePartition.localName = runtimeTable->characters+charsIndex;*/
  115. runtimeTable->namePartitionsEntries[index].entry.localNamePartition.localNameID = *localNameID;
  116. runtimeTable->namePartitionsEntries[index].entry.localNamePartition.uriID = uriID;
  117. runtimeTable->addedLocalNameEntries++;
  118. /*runtimeTable->numberOfUsedCharacters += strlen(localName);*/
  119. return errn;
  120. /*} else {
  121. return -1;
  122. }*/
  123. }
  124. #endif