ProgressImpl.h revision 156c3838b0c2a078d5652a6d9e3526526f779be0
/** @file
*
* VirtualBox COM class implementation
*/
/*
* Copyright (C) 2006 InnoTek Systemberatung GmbH
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License as published by the Free Software Foundation,
* in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
* distribution. VirtualBox OSE is distributed in the hope that it will
* be useful, but WITHOUT ANY WARRANTY of any kind.
*
* If you received this file as part of a commercial VirtualBox
* distribution, then only the terms of your commercial VirtualBox
* license agreement apply instead of the previous paragraph.
*/
#ifndef ____H_PROGRESSIMPL
#define ____H_PROGRESSIMPL
#include "VirtualBoxBase.h"
#include "Collection.h"
#include <iprt/semaphore.h>
#include <vector>
////////////////////////////////////////////////////////////////////////////////
{
// public initializer/uninitializer for internal purposes only
#if !defined (VBOX_COM_INPROC)
#endif
// IProgress properties
// IProgress properties
// public methods only for internal purposes
// for VirtualBoxSupportErrorInfoImpl
#if !defined (VBOX_COM_INPROC)
/** weak parent */
#endif
// the fields below are to be initalized by subclasses
};
////////////////////////////////////////////////////////////////////////////////
{
void FinalRelease();
// public initializer/uninitializer for internal purposes only
#if !defined (VBOX_COM_INPROC)
#endif
{
return init (
#if !defined (VBOX_COM_INPROC)
#endif
}
#if !defined (VBOX_COM_INPROC)
#endif
const BSTR aOperationDescription);
void uninit();
// IProgress methods
// public methods only for internal purposes
const Bstr &aComponent,
const char *aText, ...);
};
////////////////////////////////////////////////////////////////////////////////
/**
* The CombinedProgress class allows to combine several progress objects
* to a single progress component. This single progress component will treat
* all operations of individual progress objects as a single sequence of
* operations, that follow each other in the same order as progress objects are
* passed to the #init() method.
*
* Individual progress objects are sequentially combined so that this progress
* object:
*
* - is cancelable only if all progresses are cancelable.
* - is canceled once a progress that follows next to successfully completed
* ones reports it was canceled.
* - is completed successfully only after all progresses are completed
* successfully.
* - is completed unsuccessfully once a progress that follows next to
* successfully completed ones reports it was completed unsuccessfully;
* the result code and error info of the unsuccessful progress
* will be reported as the result code and error info of this progress.
* - returns N as the operation number, where N equals to the number of
* operations in all successfully completed progresses starting from the
* first one plus the operation number of the next (not yet complete)
* progress; the operation description of the latter one is reported as
* the operation description of this progress object.
* - returns P as the percent value, where P equals to the sum of percents
* of all successfully completed progresses starting from the
* first one plus the percent value of the next (not yet complete)
* progress, normalized to 100%.
*
* @note
* It's the respoisibility of the combined progress object creator
* to complete individual progresses in the right order: if, let's say,
* the last progress is completed before all previous ones,
* #WaitForCompletion(-1) will most likely give 100% CPU load because it
* will be in a loop calling a method that returns immediately.
*/
{
void FinalRelease();
// public initializer/uninitializer for internal purposes only
#if !defined (VBOX_COM_INPROC)
#endif
const BSTR aDescription,
{
mProgresses [0] = aProgress1;
return protectedInit (
#if !defined (VBOX_COM_INPROC)
#endif
}
#if !defined (VBOX_COM_INPROC)
#endif
const BSTR aDescription,
{
return protectedInit (
#if !defined (VBOX_COM_INPROC)
#endif
}
#if !defined (VBOX_COM_INPROC)
#endif
void uninit();
// IProgress properties
// IProgress methods
// public methods only for internal purposes
};
#endif // ____H_PROGRESSIMPL