configuration_private.h \
cvc4_assert.cpp \
cvc4_assert.h \
- cvc4_unique_ptr.h \
exception.cpp \
exception.h \
listener.cpp \
listener.h \
modal_exception.h \
output.cpp \
- output.h
+ output.h \
+ ptr_closer.h
+++ /dev/null
-/********************* */
-/*! \file cvc4_unique_ptr.h
- ** \verbatim
- ** Top contributors (to current version):
- ** Tim King
- ** This file is part of the CVC4 project.
- ** Copyright (c) 2009-2016 by the authors listed in the file AUTHORS
- ** in the top-level source directory) and their institutional affiliations.
- ** All rights reserved. See the file COPYING in the top-level source
- ** directory for licensing information.\endverbatim
- **
- ** \brief A CVC4 variant of unique_ptr for C++05.
- **
- ** A CVC4 variant of unique_ptr for C++05.
- **/
-
-#include "cvc4_public.h"
-
-#ifndef __CVC4__UNIQUE_PTR_H
-#define __CVC4__UNIQUE_PTR_H
-
-namespace CVC4 {
-
-/**
- * A CVC4 variant of unique_ptr for C++05.
- *
- * This is a variant of unique_ptr that is not designed for move semantics.
- * These are appropriate to own pointer allocations on the stack that should be
- * deleted when an exception is thrown. These should be used with care within
- * heap based data structures, and never as the return value of a function.
- */
-template <class T>
-class UniquePtr {
- public:
- UniquePtr() : d_pointer(NULL) {}
- UniquePtr(T* pointer) : d_pointer(pointer) {}
- ~UniquePtr() { delete d_pointer; }
-
- void reset(T* pointer) {
- delete d_pointer;
- d_pointer = pointer;
- }
-
- /** Gives up ownership of the pointer to the caller. */
- T* release() {
- T* copy = d_pointer;
- d_pointer = NULL;
- return copy;
- }
-
- /** Returns the pointer. */
- T* get() const { return d_pointer; }
-
- /** Returns the pointer. Undefined if the pointer is null. */
- T* operator->() const { return d_pointer; }
-
- /** Returns true if the pointer is not-null. */
- operator bool() const { return d_pointer != NULL; }
-
- private:
- UniquePtr(const UniquePtr*) CVC4_UNDEFINED;
- UniquePtr& operator=(const UniquePtr&) CVC4_UNDEFINED;
-
- /** An owned pointer object allocated by `new` or NULL. */
- T* d_pointer;
-}; /* class UniquePtr */
-
-} /* CVC4 namespace */
-
-#endif /* __CVC4__UNIQUE_PTR_H */
--- /dev/null
+/********************* */
+/*! \file ptr_closer.h
+ ** \verbatim
+ ** Top contributors (to current version):
+ ** Tim King
+ ** This file is part of the CVC4 project.
+ ** Copyright (c) 2009-2016 by the authors listed in the file AUTHORS
+ ** in the top-level source directory) and their institutional affiliations.
+ ** All rights reserved. See the file COPYING in the top-level source
+ ** directory for licensing information.\endverbatim
+ **
+ ** \brief A class to close owned pointers in the destructor.
+ **
+ ** A class to close owned pointers in the destructor.
+ **/
+
+#include "cvc4_public.h"
+
+#ifndef __CVC4__PTR_CLOSER_H
+#define __CVC4__PTR_CLOSER_H
+
+namespace CVC4 {
+
+/**
+ * A class to close owned pointers in the destructor. This plays a similar role
+ * to unique_ptr, but without move semantics. This is designed to overcome the
+ * lack of having unique_ptr in C++05.
+ *
+ * This is a variant of unique_ptr that is not designed for move semantics.
+ * These are appropriate to own pointer allocations on the stack that should be
+ * deleted when an exception is thrown. These should be used with care within
+ * heap based data structures, and never as the return value of a function.
+ */
+template <class T>
+class PtrCloser {
+ public:
+ PtrCloser() : d_pointer(NULL) {}
+ explicit PtrCloser(T* pointer) : d_pointer(pointer) {}
+ ~PtrCloser() { delete d_pointer; }
+
+ /** Deletes the currently owned copy and takes ownership of pointer. */
+ void reset(T* pointer = NULL) {
+ delete d_pointer;
+ d_pointer = pointer;
+ }
+
+ /** Gives up ownership of the pointer to the caller. */
+ T* release() {
+ T* copy = d_pointer;
+ d_pointer = NULL;
+ return copy;
+ }
+
+ /** Returns the pointer. */
+ T* get() const { return d_pointer; }
+
+ /** Returns the pointer. Undefined if the pointer is null. */
+ T* operator->() const { return d_pointer; }
+
+ /** Returns true if the pointer is not-null. */
+ operator bool() const { return d_pointer != NULL; }
+
+ private:
+ PtrCloser(const PtrCloser*) CVC4_UNDEFINED;
+ PtrCloser& operator=(const PtrCloser&) CVC4_UNDEFINED;
+
+ /** An owned pointer object allocated by `new`. Or NULL. */
+ T* d_pointer;
+}; /* class PtrCloser */
+
+} /* CVC4 namespace */
+
+#endif /* __CVC4__PTR_CLOSER_H */
}/* CVC4::kind namespace */
-#line 341 "${template}"
+#line 342 "${template}"
namespace theory {
#include "cvc4autoconfig.h"
#include "base/configuration.h"
-#include "base/cvc4_unique_ptr.h"
#include "base/output.h"
+#include "base/ptr_closer.h"
#include "expr/expr_iomanip.h"
#include "expr/expr_manager.h"
#include "main/command_executor.h"
}
# endif
- UniquePtr<Parser> replayParser;
+ PtrCloser<Parser> replayParser;
if( opts.getReplayInputFilename() != "" ) {
std::string replayFilename = opts.getReplayInputFilename();
ParserBuilder replayParserBuilder(exprMgr, replayFilename, opts);
vector< vector<Command*> > allCommands;
allCommands.push_back(vector<Command*>());
- UniquePtr<Parser> parser(parserBuilder.build());
+ PtrCloser<Parser> parser(parserBuilder.build());
if(replayParser) {
// have the replay parser use the file's declarations
replayParser->useDeclarationsFrom(parser.get());
#endif /* CVC4_COMPETITION_MODE && !CVC4_SMTCOMP_APPLICATION_TRACK */
}
- UniquePtr<Parser> parser(parserBuilder.build());
+ PtrCloser<Parser> parser(parserBuilder.build());
if(replayParser) {
// have the replay parser use the file's declarations
replayParser->useDeclarationsFrom(parser.get());