summaryrefslogtreecommitdiff
path: root/src/expr/emptybag.h
diff options
context:
space:
mode:
authormudathirmahgoub <mudathirmahgoub@gmail.com>2020-09-22 16:59:41 -0500
committerGitHub <noreply@github.com>2020-09-22 16:59:41 -0500
commite4a29a6033ecc7ba5ec266f37e8f151f09ead020 (patch)
tree26dff55bd5121dc311185dcd3071a6e8751f9f5e /src/expr/emptybag.h
parent524c879720779abc3bc529459da8734f2eb3e3ad (diff)
Add skeleton for theory of bags (multisets) (#5100)
This PR adds initial headers and mostly empty source files for the theory of bags (multisets). It acts as a basis for future commits. It includes straightforward implementation for typing rules an enumerator for bags.
Diffstat (limited to 'src/expr/emptybag.h')
-rw-r--r--src/expr/emptybag.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/expr/emptybag.h b/src/expr/emptybag.h
new file mode 100644
index 000000000..a16c12d86
--- /dev/null
+++ b/src/expr/emptybag.h
@@ -0,0 +1,63 @@
+/********************* */
+/*! \file emptybag.h
+ ** \verbatim
+ ** Top contributors (to current version):
+ ** Mudathir Mohamed
+ ** This file is part of the CVC4 project.
+ ** Copyright (c) 2009-2020 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 for empty bags
+ **/
+
+#include "cvc4_public.h"
+
+#ifndef CVC4__EMPTY_BAG_H
+#define CVC4__EMPTY_BAG_H
+
+#include <iosfwd>
+#include <memory>
+
+namespace CVC4 {
+
+class TypeNode;
+
+class CVC4_PUBLIC EmptyBag
+{
+ public:
+ /**
+ * Constructs an emptybag of the specified type. Note that the argument
+ * is the type of the bag itself, NOT the type of the elements.
+ */
+ EmptyBag(const TypeNode& bagType);
+ ~EmptyBag();
+ EmptyBag(const EmptyBag& other);
+ EmptyBag& operator=(const EmptyBag& other);
+
+ const TypeNode& getType() const;
+ bool operator==(const EmptyBag& es) const;
+ bool operator!=(const EmptyBag& es) const;
+ bool operator<(const EmptyBag& es) const;
+ bool operator<=(const EmptyBag& es) const;
+ bool operator>(const EmptyBag& es) const;
+ bool operator>=(const EmptyBag& es) const;
+
+ private:
+ EmptyBag();
+
+ /** the type of the empty bag itself (not the type of the elements)*/
+ std::unique_ptr<TypeNode> d_type;
+}; /* class EmptyBag */
+
+std::ostream& operator<<(std::ostream& out, const EmptyBag& es) CVC4_PUBLIC;
+
+struct CVC4_PUBLIC EmptyBagHashFunction
+{
+ size_t operator()(const EmptyBag& es) const;
+}; /* struct EmptyBagHashFunction */
+
+} // namespace CVC4
+
+#endif /* CVC4__EMPTY_BAG_H */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback