Developer World
Spresense SDK Library v3.2.0-ebc0364
cpp_util.h
1/****************************************************************************
2 * modules/include/memutils/os_utils/cpp_util.h
3 *
4 * Copyright 2018 Sony Semiconductor Solutions Corporation
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 * 3. Neither the name of Sony Semiconductor Solutions Corporation nor
17 * the names of its contributors may be used to endorse or promote
18 * products derived from this software without specific prior written
19 * permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
34 ****************************************************************************/
35
36#ifndef CPP_UTIL_H_INCLUDED
37#define CPP_UTIL_H_INCLUDED
38#ifdef __cplusplus
39
40//#include "chateau_assert.h"
41
43// Copy guard class
44//
45class CopyGuard {
46protected:
47 CopyGuard() {}
48 ~CopyGuard() {}
49private:
50 CopyGuard(const CopyGuard&);
51 const CopyGuard& operator=(const CopyGuard&);
52}; // class CopyGuard
53
54
56// Range checkable array class
57// 範囲チェックを行うには、-DARRAY_ASSERT=CHATEAU_FATAL_ASSERTオプションでビルドする
58//
59#ifndef ARRAY_ASSERT
60#define ARRAY_ASSERT(exp)
61#endif
62
63template<typename T, size_t N>
64class Array {
65public:
66 // 配列同様の初期化を可能にするため、publicとする
67 T m_elems[N];
68public:
69 typedef T elem_type_t;
70
71 static size_t capacity() { return N; }
72
73 T& operator[](size_t index) {
74 ARRAY_ASSERT(index < N);
75 return m_elems[index];
76 }
77
78 const T& operator[](size_t index) const {
79 ARRAY_ASSERT(index < N);
80 return m_elems[index];
81 }
82}; // class Array
83
85// Template functions
86//
87template<typename T>
88inline const T& Min(const T& a, const T& b) { return (a < b) ? a : b; }
89
90template<typename T>
91inline const T& Max(const T& a, const T& b) { return (a > b) ? a : b; }
92
93#endif /* __cplusplus */
94#endif /* CPP_UTIL_H_INCLUDED */
95/*
96 * $Log: $
97 */
Definition: cpp_util.h:64
Definition: cpp_util.h:45