Example #1
0
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;
}
Example #2
0
LinkedDouble *LinkedDouble::getLast(void)
{
	LinkedDouble *node;

  enterLock();
  node = lastObject();
  leaveLock();

	return node;
}
Example #3
0
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();
}
Example #4
0
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();
}