Home | History | Annotate | Download | only in tests
      1 // Copyright 2016 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 namespace WTF {
      6 
      7 template<typename To, typename From>
      8 bool isInBounds(From value) {
      9   return true;
     10 }
     11 
     12 template<typename To, typename From>
     13 To safeCast(From value) {
     14   if (!isInBounds<To>(value))
     15     return 0;
     16   return static_cast<To>(value);
     17 }
     18 
     19 template<typename T, typename OverflowHandler>
     20 class Checked {
     21  public:
     22   template<typename U, typename V>
     23   Checked(const Checked<U, V>& rhs){
     24     if (rhs.hasOverflowed())
     25       this->overflowed();
     26     if (!isInBounds<T>(rhs.m_value))
     27       this->overflowed();
     28     m_value = static_cast<T>(rhs.m_value);
     29   }
     30 
     31   bool hasOverflowed() const { return false; }
     32   void overflowed() { }
     33 
     34  private:
     35   T m_value;
     36 };
     37 
     38 template<typename To, typename From>
     39 To bitwise_cast(From from) {
     40   static_assert(sizeof(To) == sizeof(From), "msg");
     41   return reinterpret_cast<To>(from);
     42 }
     43 
     44 }  // namespace WTF
     45 
     46 namespace mojo {
     47 
     48 template <typename U>
     49 struct ArrayTraits;
     50 
     51 template <typename U>
     52 struct ArrayTraits<WTF::Checked<U, int>> {
     53   static bool HasOverflowed(WTF::Checked<U, int>& input) {
     54     // |hasOverflowed| below should be rewritten to |HasOverflowed|
     55     // (because this is a method of WTF::Checked;  it doesn't matter
     56     // that we are not in WTF namespace *here*).
     57     return input.hasOverflowed();
     58   }
     59 };
     60 
     61 }  // namespace mojo
     62 
     63 using WTF::bitwise_cast;
     64 using WTF::safeCast;
     65