]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/tagged.hpp
io.streams.256color: faster by caching styles
[factor.git] / vm / tagged.hpp
index c9a77da67640a17199ff42b6deb739dc80445a0b..0af2130fa010732bd600e27ef1057f03b4d0e0c8 100644 (file)
@@ -32,18 +32,17 @@ template <typename Type> struct tagged {
   explicit tagged(cell tagged) : value_(tagged) {}
   explicit tagged(Type* untagged) : value_(factor::tag(untagged)) {}
 
-  Type* operator->() const { return untagged(); }
-  cell* operator&() const { return &value_; }
-
-  const tagged<Type>& operator=(const Type* x) {
-    value_ = tag(x);
-    return *this;
+  void set_value(const cell ptr) {
+    value_ = ptr;
   }
-  const tagged<Type>& operator=(const cell& x) {
-    value_ = x;
-    return *this;
+
+  void set_untagged(const Type *untagged) {
+    set_value(tag(untagged));
   }
 
+  Type* operator->() const { return untagged(); }
+  cell* operator&() const { return &value(); }
+
   bool operator==(const tagged<Type>& x) { return value_ == x.value_; }
   bool operator!=(const tagged<Type>& x) { return value_ != x.value_; }