st->pListPointArray[pListIndex]; //拷贝 68. tListIndex++; //拷贝序号加1 69. } 70. } 71. pList->Total = (SavePointArray == tListPointArray) pList->Total - 1 : pList->Total; //根据保留的内存块改变总数的值 72. if(FreePointArray != RT_NULL) rt_free(FreePointArray); //释放该释放的不用的内存块 73. pList->pListPointArray = SavePointArray; //保留该保留的 74. } 75. //List构造函数 76. static List *ListCreate(void) 77. { 78. List *pList = (List *)rt_malloc(sizeof(List)); 79. pList->Total = 0; 80. pList->pListPointArray = RT_NULL; 81. pList->Add = ListAdd; 82. pList->Remove = ListRemove; 83. pList->Delete = ListDelete; 84. return pList; 85. } 86. //委托类 87. typedef void (*Event)(void *); 88. typedef struct _Entrust Entrust; 89. struct _Entrust 90. { 91. List *FunArray; 92. void (*Add)(void *pEntrust, void *pObject); 93. void (*Remove)(void *pEntrust, void *pObject); 94. void (*Update)(void *pEntrust); 95. void (*Delete)(void *pEntrust); 96. }; 97. static void EntrustAdd(void *pEntrust, void *pFun) 98. { 99. List *pList = ((Entrust *)pEntrust)->FunArray; 100. pList->Add(pList, pFun); 101. } 102. static void EntrustRemove(void *pEntrust, void *pFun) 103. { 104. List *pList = ((Entrust *)pEntrust)->FunArray; 105. pList->Remove(pList, pFun); 106. } 107. static void EntrustUpdate(void *pEntrust) 108. { 109. List *pListFun = ((Entrust *)pEntrust)->FunArray; 110. int i; 111. int FunAddress; 112. if(pListFun->Total == 0) return; 113. for(i = 0; i < pListFun->Total; i++) 114. { 115. FunAddress = (int)(*(pListFun->pListPointArray + i)); 116. //先将整型变量转换成一个整形指针,再将该指针指向的内容转换成Event函数指针 117. (*(Event)(*(int *)FunAddress))(pListFun->pListPointArray[i]); 118. } 119. } 120. static void EntrustDelete(void *pEntrust) 121. { 122. List *pList = ((Entrust *)pEntrust)->FunArray; 123. pList->Delete(pList); 124. rt_free(pEntrust); 125. } 126. static Entrust *EntrustCreate(rt_size_t Size) 127. { 128. Entrust *pEntrust = (Entrust *)rt_malloc(Size); 129. pEntrust->FunArray = (List *)ListCreate(); 130. pEntrust->Add = EntrustAdd; 131. pEntrust->Remove = EntrustRemove; 132. pEntrust->Update = EntrustUpdate; 133. pEntrust->Delete = EntrustDelete; 134. return pEntrust; 135. } 136. //具体通知者 137. //通知者:老板 138. typedef struct _Boss Boss; 139. struct _Boss 140. { 141. Entrust *pEntrust; //添加一个委托类 142. char *Action; 143. char *(*GetSubjectState)(void *pBoss); 144. void (*SetSubjectState)(void *pBoss, char *pBossState); 145. void (*Notify)(void *pBoss); 146. void (*Delete)(void *pBoss); 147. }; 148. static char *BossGetSubjectState(void *pBoss) 149. { 150. return ((Boss *)pBoss)->Action; 151. } 152. static void BossSetSubjectState(void *pBoss, char *pBossState) 153. { 154. ((Boss *)pBoss)->Action = pBossState; 155. } 156. static void BossNotify(void *pBoss) 157. { 158. Entrust *pEntrust = ((Boss *)pBoss)->pEntrust; 159. pEntrust->Update(pEntrust); 160. } 161. static void BossDelete(void *pBoss) 162. { 163. Entrust *pEntrust = ((Boss *)pBoss)->pEntrust; 164. pEntrust->Del |