long int MetaDataTable::nextObject() { long int result = 0; if (!isEmpty()) { current_objectID++; if (current_objectID < objects.size()) { result = current_objectID; } else { result = NO_MORE_OBJECTS; current_objectID = lastObject(); } } else { result = NO_OBJECTS_STORED; current_objectID = -1; } return result; }
LinkedDouble *LinkedDouble::getLast(void) { LinkedDouble *node; enterLock(); node = lastObject(); leaveLock(); return node; }
long int MetaDataTable::removeObject(long int objectID) { long int i = (objectID == -1) ? current_objectID : objectID; if (objects[i]) { objects[i]->clear(); delete objects[i]; } objects.erase(objects.begin() + i); return lastObject(); }
void LinkedDouble::insert(LinkedDouble& obj, InsertMode position) { LinkedDouble *node; enterLock(); obj.detach(); switch ( position ) { case modeAtFirst : node = firstObject(); obj.nextObject = node; node->prevObject = &obj; break; case modeBefore : obj.nextObject = this; obj.prevObject = this->prevObject; this->prevObject = &obj; if (obj.prevObject) obj.prevObject->nextObject = &obj; break; case modeAfter : obj.nextObject = this->nextObject; obj.prevObject = this; this->nextObject = &obj; if (obj.nextObject) obj.nextObject->prevObject = &obj; break; case modeAtLast : default : node = lastObject(); obj.nextObject = node->nextObject; obj.prevObject = node; node->nextObject = &obj; if(obj.nextObject) obj.nextObject->prevObject = &obj; break; } leaveLock(); }