blob: 93ea0f6de70b3de47f53e77f0f238c055ffb31ed [file] [log] [blame]
pkasting@chromium.orge7a4a122015-01-28 21:36:55 +00001/*
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_BASE_ARRAYSIZE_H_
12#define WEBRTC_BASE_ARRAYSIZE_H_
13
14// This file defines the arraysize() macro and is derived from Chromium's
15// base/macros.h.
16
17// The arraysize(arr) macro returns the # of elements in an array arr.
18// The expression is a compile-time constant, and therefore can be
19// used in defining new arrays, for example. If you use arraysize on
20// a pointer by mistake, you will get a compile-time error.
21
22// This template function declaration is used in defining arraysize.
23// Note that the function doesn't need an implementation, as we only
24// use its type.
25template <typename T, size_t N>
26char (&ArraySizeHelper(T (&array)[N]))[N];
27
28// That gcc wants both of these prototypes seems mysterious. VC, for
29// its part, can't decide which to use (another mystery). Matching of
30// template overloads: the final frontier.
31#ifndef _MSC_VER
32template <typename T, size_t N>
33char (&ArraySizeHelper(const T (&array)[N]))[N];
34#endif
35
36#define arraysize(array) (sizeof(ArraySizeHelper(array)))
37
38#endif // WEBRTC_BASE_ARRAYSIZE_H_