OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** \mainpage V8 API Reference Guide | 5 /** \mainpage V8 API Reference Guide |
6 * | 6 * |
7 * V8 is Google's open source JavaScript engine. | 7 * V8 is Google's open source JavaScript engine. |
8 * | 8 * |
9 * This set of documents provides reference material generated from the | 9 * This set of documents provides reference material generated from the |
10 * V8 header file, include/v8.h. | 10 * V8 header file, include/v8.h. |
(...skipping 5708 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5719 friend class Maybe; | 5719 friend class Maybe; |
5720 template <class T> friend class Eternal; | 5720 template <class T> friend class Eternal; |
5721 template <class T> friend class PersistentBase; | 5721 template <class T> friend class PersistentBase; |
5722 template <class T, class M> friend class Persistent; | 5722 template <class T, class M> friend class Persistent; |
5723 friend class Context; | 5723 friend class Context; |
5724 }; | 5724 }; |
5725 | 5725 |
5726 | 5726 |
5727 /** | 5727 /** |
5728 * A simple Maybe type, representing an object which may or may not have a | 5728 * A simple Maybe type, representing an object which may or may not have a |
5729 * value. | 5729 * value, see https://hackage.haskell.org/package/base/docs/Data-Maybe.html. |
5730 */ | 5730 */ |
5731 template <class T> | 5731 template <class T> |
5732 class Maybe { | 5732 class Maybe { |
5733 public: | 5733 public: |
5734 // TODO(dcarney): remove this constructor, it makes no sense. | |
5735 Maybe(bool has, const T& t) : has_value(has), value(t) {} | |
5736 | |
5737 V8_INLINE bool IsJust() const { return has_value; } | 5734 V8_INLINE bool IsJust() const { return has_value; } |
5738 | 5735 |
5739 V8_INLINE T FromJust() const { | 5736 V8_INLINE T FromJust() const { |
5740 #ifdef V8_ENABLE_CHECKS | 5737 #ifdef V8_ENABLE_CHECKS |
5741 V8::CheckIsJust(IsJust()); | 5738 V8::CheckIsJust(IsJust()); |
5742 #endif | 5739 #endif |
5743 return value; | 5740 return value; |
5744 } | 5741 } |
5745 | 5742 |
5746 V8_INLINE T FromMaybe(const T& default_value) const { | 5743 V8_INLINE T FromMaybe(const T& default_value) const { |
5747 return has_value ? value : default_value; | 5744 return has_value ? value : default_value; |
5748 } | 5745 } |
5749 | 5746 |
5750 // TODO(dcarney): make private. | 5747 V8_INLINE bool operator==(const Maybe& other) const { |
| 5748 return (IsJust() == other.IsJust()) && |
| 5749 (!IsJust() || FromJust() == other.FromJust()); |
| 5750 } |
| 5751 |
| 5752 V8_INLINE bool operator!=(const Maybe& other) const { |
| 5753 return !operator==(other); |
| 5754 } |
| 5755 |
| 5756 private: |
| 5757 Maybe() : has_value(false) {} |
| 5758 explicit Maybe(const T& t) : has_value(true), value(t) {} |
| 5759 |
5751 bool has_value; | 5760 bool has_value; |
5752 T value; | 5761 T value; |
5753 | 5762 |
5754 private: | |
5755 template <class U> | 5763 template <class U> |
5756 friend Maybe<U> Nothing(); | 5764 friend Maybe<U> Nothing(); |
5757 template <class U> | 5765 template <class U> |
5758 friend Maybe<U> Just(const U& u); | 5766 friend Maybe<U> Just(const U& u); |
5759 | |
5760 Maybe() : has_value(false) {} | |
5761 explicit Maybe(const T& t) : has_value(true), value(t) {} | |
5762 }; | 5767 }; |
5763 | 5768 |
5764 | 5769 |
5765 template <class T> | 5770 template <class T> |
5766 inline Maybe<T> Nothing() { | 5771 inline Maybe<T> Nothing() { |
5767 return Maybe<T>(); | 5772 return Maybe<T>(); |
5768 } | 5773 } |
5769 | 5774 |
5770 | 5775 |
5771 template <class T> | 5776 template <class T> |
(...skipping 1874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7646 */ | 7651 */ |
7647 | 7652 |
7648 | 7653 |
7649 } // namespace v8 | 7654 } // namespace v8 |
7650 | 7655 |
7651 | 7656 |
7652 #undef TYPE_CHECK | 7657 #undef TYPE_CHECK |
7653 | 7658 |
7654 | 7659 |
7655 #endif // V8_H_ | 7660 #endif // V8_H_ |
OLD | NEW |