diff options
author | Chris Lattner <sabre@nondot.org> | 2003-12-31 05:40:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-12-31 05:40:02 +0000 |
commit | a2e9363617a77b7ada49759676d464bdf373cc69 (patch) | |
tree | cdbdb4fabd19020b031fb702e35dad66578fe0bc /include/llvm/Support | |
parent | a7e2321a65b1ad8daf593125a2b81635ad80c1d5 (diff) | |
download | external_llvm-a2e9363617a77b7ada49759676d464bdf373cc69.zip external_llvm-a2e9363617a77b7ada49759676d464bdf373cc69.tar.gz external_llvm-a2e9363617a77b7ada49759676d464bdf373cc69.tar.bz2 |
New class, useful for command-line interactive programs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10662 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support')
-rw-r--r-- | include/llvm/Support/SlowOperationInformer.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/include/llvm/Support/SlowOperationInformer.h b/include/llvm/Support/SlowOperationInformer.h new file mode 100644 index 0000000..f27a055 --- /dev/null +++ b/include/llvm/Support/SlowOperationInformer.h @@ -0,0 +1,56 @@ +//===- SlowOperationInformer.h - Keep the user informed ---------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines a simple object which can be used to let the user know what +// is going on when a slow operation is happening,l and gives them the ability +// to cancel it. Potentially slow operations can stack allocate one of these +// objects, and periodically call the "progress" method to update the progress +// bar. If the operation takes more than 3 seconds to complete, the progress +// bar is automatically shown and updated every second. As such, the slow +// operation should not print stuff to the screen, and should not be confused if +// an extra line appears on the screen (ie, the cursor should be at the start of +// the line). +// +// If the user presses CTRL-C during the operation, the next invocation of the +// progress method with throw an std::string object indicating that the +// operation was cancelled. As such, client code must be exception safe around +// the progress method. +// +// Because SlowOperationInformers fiddle around with signals, they cannot be +// nested. The SIGINT signal handler is restored after the +// SlowOperationInformer is destroyed, but the SIGALRM handlers is set back to +// the default. +// +//===----------------------------------------------------------------------===// + +#ifndef SUPPORT_SLOW_OPERATION_INFORMER_H +#define SUPPORT_SLOW_OPERATION_INFORMER_H + +#include <string> + +namespace llvm { + class SlowOperationInformer { + std::string OperationName; + unsigned LastPrintAmount; + + SlowOperationInformer(const SlowOperationInformer&); // DO NOT IMPLEMENT + void operator=(const SlowOperationInformer&); // DO NOT IMPLEMENT + public: + SlowOperationInformer(const std::string &Name); + ~SlowOperationInformer(); + + /// progress - Clients should periodically call this method when they are in + /// an exception-safe state. The Amount variable should indicate how far + /// along the operation is, given in 1/10ths of a percent (in other words, + /// Amount should range from 0 to 1000). + void progress(unsigned Amount); + }; +} // end namespace llvm + +#endif /* SLOW_OPERATION_INFORMER_H */ |