00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdlib.h>
00024 #include <xplc/utils.h>
00025 #include <xplc/uuidops.h>
00026 #include "statichandler.h"
00027
00028 UUID_MAP_BEGIN(StaticServiceHandler)
00029 UUID_MAP_ENTRY(IObject)
00030 UUID_MAP_ENTRY(IServiceHandler)
00031 UUID_MAP_ENTRY(IStaticServiceHandler)
00032 UUID_MAP_END
00033
00034 StaticServiceHandler::~StaticServiceHandler() {
00035 ObjectNode* node;
00036 ObjectNode* ptr;
00037
00038 node = objects;
00039
00040 while(node) {
00041 ptr = node;
00042 node = node->next;
00043 delete ptr;
00044 }
00045
00046 objects = 0;
00047 }
00048
00049 IObject* StaticServiceHandler::getObject(const UUID& aUuid) {
00050 ObjectNode* node;
00051
00052 node = objects;
00053
00054 while(node) {
00055 if(node->uuid == aUuid) {
00056 node->obj->addRef();
00057 return node->obj;
00058 }
00059
00060 node = node->next;
00061 }
00062
00063
00064
00065
00066 return 0;
00067 }
00068
00069 void StaticServiceHandler::addObject(const UUID& aUuid, IObject* aObj) {
00070 ObjectNode* node;
00071
00072
00073 if(!aObj)
00074 return;
00075
00076 node = objects;
00077
00078 while(node) {
00079 if(node->uuid == aUuid)
00080 break;
00081
00082 node = node->next;
00083 }
00084
00085
00086
00087
00088
00089 if(node)
00090 return;
00091
00092 node = new ObjectNode(aUuid, aObj, objects);
00093 objects = node;
00094 }
00095
00096 void StaticServiceHandler::removeObject(const UUID& aUuid) {
00097 ObjectNode* node;
00098 ObjectNode** ptr;
00099
00100 node = objects;
00101 ptr = &objects;
00102
00103 while(node) {
00104 if(node->uuid == aUuid) {
00105 *ptr = node->next;
00106 delete node;
00107 break;
00108 }
00109
00110 ptr = &node->next;
00111 node = *ptr;
00112 }
00113 }