Pfp Cybersecurity (Aka Power Fingerprinting, Inc.) / Mbed OS pfp-emon-nxp

Dependencies:   FXAS21002 FXOS8700Q

Committer:
vithyat
Date:
Fri Mar 20 20:15:18 2020 +0000
Revision:
2:990c985a69ae
Parent:
0:977e87915078
Update to work with P2Scan runtime

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vithyat 0:977e87915078 1 /*
vithyat 0:977e87915078 2 * Copyright (c) 2015-2016 ARM Limited. All rights reserved.
vithyat 0:977e87915078 3 * SPDX-License-Identifier: Apache-2.0
vithyat 0:977e87915078 4 * Licensed under the Apache License, Version 2.0 (the License); you may
vithyat 0:977e87915078 5 * not use this file except in compliance with the License.
vithyat 0:977e87915078 6 * You may obtain a copy of the License at
vithyat 0:977e87915078 7 *
vithyat 0:977e87915078 8 * http://www.apache.org/licenses/LICENSE-2.0
vithyat 0:977e87915078 9 *
vithyat 0:977e87915078 10 * Unless required by applicable law or agreed to in writing, software
vithyat 0:977e87915078 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
vithyat 0:977e87915078 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
vithyat 0:977e87915078 13 * See the License for the specific language governing permissions and
vithyat 0:977e87915078 14 * limitations under the License.
vithyat 0:977e87915078 15 */
vithyat 0:977e87915078 16
vithyat 0:977e87915078 17 #ifndef M2M_VECTOR_H
vithyat 0:977e87915078 18 #define M2M_VECTOR_H
vithyat 0:977e87915078 19
vithyat 0:977e87915078 20 /*! \file m2mvector.h
vithyat 0:977e87915078 21 * \brief A simple C++ Vector class, used as replacement for std::vector.
vithyat 0:977e87915078 22 */
vithyat 0:977e87915078 23
vithyat 0:977e87915078 24
vithyat 0:977e87915078 25 namespace m2m
vithyat 0:977e87915078 26 {
vithyat 0:977e87915078 27
vithyat 0:977e87915078 28 template <typename ObjectTemplate>
vithyat 0:977e87915078 29
vithyat 0:977e87915078 30 class Vector
vithyat 0:977e87915078 31 {
vithyat 0:977e87915078 32 public:
vithyat 0:977e87915078 33 explicit Vector( int init_size = MIN_CAPACITY)
vithyat 0:977e87915078 34 : _size(0),
vithyat 0:977e87915078 35 _capacity((init_size >= MIN_CAPACITY) ? init_size : MIN_CAPACITY) {
vithyat 0:977e87915078 36 _object_template = new ObjectTemplate[ _capacity ];
vithyat 0:977e87915078 37 }
vithyat 0:977e87915078 38
vithyat 0:977e87915078 39 Vector(const Vector & rhs ): _object_template(0) {
vithyat 0:977e87915078 40 operator=(rhs);
vithyat 0:977e87915078 41 }
vithyat 0:977e87915078 42
vithyat 0:977e87915078 43 ~Vector() {
vithyat 0:977e87915078 44 delete [] _object_template;
vithyat 0:977e87915078 45 }
vithyat 0:977e87915078 46
vithyat 0:977e87915078 47 const Vector & operator=(const Vector & rhs) {
vithyat 0:977e87915078 48 if(this != &rhs) {
vithyat 0:977e87915078 49 delete[] _object_template;
vithyat 0:977e87915078 50 _size = rhs.size();
vithyat 0:977e87915078 51 _capacity = rhs._capacity;
vithyat 0:977e87915078 52
vithyat 0:977e87915078 53 _object_template = new ObjectTemplate[capacity()];
vithyat 0:977e87915078 54 for(int k = 0; k < size(); k++) {
vithyat 0:977e87915078 55 _object_template[k] = rhs._object_template[k];
vithyat 0:977e87915078 56 }
vithyat 0:977e87915078 57 }
vithyat 0:977e87915078 58 return *this;
vithyat 0:977e87915078 59 }
vithyat 0:977e87915078 60
vithyat 0:977e87915078 61 void resize(int new_size) {
vithyat 0:977e87915078 62 if(new_size > _capacity) {
vithyat 0:977e87915078 63 reserve(new_size * 2 + 1);
vithyat 0:977e87915078 64 }
vithyat 0:977e87915078 65 _size = new_size;
vithyat 0:977e87915078 66 }
vithyat 0:977e87915078 67
vithyat 0:977e87915078 68 void reserve(int new_capacity) {
vithyat 0:977e87915078 69 if(new_capacity < _size) {
vithyat 0:977e87915078 70 return;
vithyat 0:977e87915078 71 }
vithyat 0:977e87915078 72 ObjectTemplate *old_array = _object_template;
vithyat 0:977e87915078 73
vithyat 0:977e87915078 74 _object_template = new ObjectTemplate[new_capacity];
vithyat 0:977e87915078 75 for(int k = 0; k < _size; k++) {
vithyat 0:977e87915078 76 _object_template[k] = old_array[k];
vithyat 0:977e87915078 77 }
vithyat 0:977e87915078 78 _capacity = new_capacity;
vithyat 0:977e87915078 79 delete [] old_array;
vithyat 0:977e87915078 80 }
vithyat 0:977e87915078 81
vithyat 0:977e87915078 82 ObjectTemplate & operator[](int idx) {
vithyat 0:977e87915078 83 return _object_template[idx];
vithyat 0:977e87915078 84 }
vithyat 0:977e87915078 85
vithyat 0:977e87915078 86 const ObjectTemplate& operator[](int idx) const {
vithyat 0:977e87915078 87 return _object_template[idx];
vithyat 0:977e87915078 88 }
vithyat 0:977e87915078 89
vithyat 0:977e87915078 90 bool empty() const{
vithyat 0:977e87915078 91 return size() == 0;
vithyat 0:977e87915078 92 }
vithyat 0:977e87915078 93
vithyat 0:977e87915078 94 int size() const {
vithyat 0:977e87915078 95 return _size;
vithyat 0:977e87915078 96 }
vithyat 0:977e87915078 97
vithyat 0:977e87915078 98 int capacity() const {
vithyat 0:977e87915078 99 return _capacity;
vithyat 0:977e87915078 100 }
vithyat 0:977e87915078 101
vithyat 0:977e87915078 102 void push_back(const ObjectTemplate& x) {
vithyat 0:977e87915078 103 if(_size == _capacity) {
vithyat 0:977e87915078 104 reserve(2 * _capacity + 1);
vithyat 0:977e87915078 105 }
vithyat 0:977e87915078 106 _object_template[_size] = x;
vithyat 0:977e87915078 107 _size++;
vithyat 0:977e87915078 108 }
vithyat 0:977e87915078 109
vithyat 0:977e87915078 110 void pop_back() {
vithyat 0:977e87915078 111 _size--;
vithyat 0:977e87915078 112 }
vithyat 0:977e87915078 113
vithyat 0:977e87915078 114 void clear() {
vithyat 0:977e87915078 115 _size = 0;
vithyat 0:977e87915078 116 }
vithyat 0:977e87915078 117
vithyat 0:977e87915078 118 const ObjectTemplate& back() const {
vithyat 0:977e87915078 119 return _object_template[_size - 1];
vithyat 0:977e87915078 120 }
vithyat 0:977e87915078 121
vithyat 0:977e87915078 122 typedef ObjectTemplate* iterator;
vithyat 0:977e87915078 123 typedef const ObjectTemplate* const_iterator;
vithyat 0:977e87915078 124
vithyat 0:977e87915078 125 iterator begin() {
vithyat 0:977e87915078 126 return &_object_template[0];
vithyat 0:977e87915078 127 }
vithyat 0:977e87915078 128
vithyat 0:977e87915078 129 const_iterator begin() const {
vithyat 0:977e87915078 130 return &_object_template[0];
vithyat 0:977e87915078 131 }
vithyat 0:977e87915078 132
vithyat 0:977e87915078 133 iterator end() {
vithyat 0:977e87915078 134 return &_object_template[_size];
vithyat 0:977e87915078 135 }
vithyat 0:977e87915078 136
vithyat 0:977e87915078 137 const_iterator end() const {
vithyat 0:977e87915078 138 return &_object_template[_size];
vithyat 0:977e87915078 139 }
vithyat 0:977e87915078 140
vithyat 0:977e87915078 141 void erase(int position) {
vithyat 0:977e87915078 142 if(position < _size) {
vithyat 0:977e87915078 143 for(int k = position; k + 1 < _size; k++) {
vithyat 0:977e87915078 144 _object_template[k] = _object_template[k + 1];
vithyat 0:977e87915078 145 }
vithyat 0:977e87915078 146 _size--;
vithyat 0:977e87915078 147 }
vithyat 0:977e87915078 148 }
vithyat 0:977e87915078 149
vithyat 0:977e87915078 150 enum {
vithyat 0:977e87915078 151 MIN_CAPACITY = 1
vithyat 0:977e87915078 152 };
vithyat 0:977e87915078 153
vithyat 0:977e87915078 154 private:
vithyat 0:977e87915078 155 int _size;
vithyat 0:977e87915078 156 int _capacity;
vithyat 0:977e87915078 157 ObjectTemplate* _object_template;
vithyat 0:977e87915078 158 };
vithyat 0:977e87915078 159
vithyat 0:977e87915078 160 } // namespace
vithyat 0:977e87915078 161
vithyat 0:977e87915078 162 #endif // M2M_VECTOR_H