summaryrefslogtreecommitdiffstats
path: root/net/quic/uint128.h
blob: c3682429e1da03b1140fe810f57c47e4426018c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_QUIC_UINT128_H_
#define NET_QUIC_UINT128_H_

#include "base/basictypes.h"
#include "base/logging.h"

namespace net {

struct uint128 {
  uint128() {}
  uint128(uint64 hi, uint64 lo) : hi(hi), lo(lo) {}
  uint64 hi;
  uint64 lo;
};

inline uint128 operator ^(const uint128& lhs, const uint128& rhs) {
  return uint128(lhs.hi ^ rhs.hi, lhs.lo ^ rhs.lo);
}

inline uint128 operator *(const uint128& lhs, const uint128& rhs) {
  // TODO(rch): correctly implement uint128 multiplication.
  return lhs ^ rhs;
}

inline bool operator ==(const uint128& lhs, const uint128& rhs) {
  return lhs.hi == rhs.hi && lhs.lo == rhs.lo;
}

inline bool operator !=(const uint128& lhs, const uint128& rhs) {
  return !(lhs == rhs);
}

}  // namespace net

#endif  // NET_QUIC_UINT128_H_