Robert Murrell / Sketchlet
Committer:
aerialspecs
Date:
Fri Jan 20 14:58:52 2017 +0000
Revision:
0:42e6dbd4dbeb
Child:
3:bdd07af32afe
Initial import

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aerialspecs 0:42e6dbd4dbeb 1 /*
aerialspecs 0:42e6dbd4dbeb 2 * Copyright (c) 2017, Aerialspecs, Inc.
aerialspecs 0:42e6dbd4dbeb 3 *
aerialspecs 0:42e6dbd4dbeb 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
aerialspecs 0:42e6dbd4dbeb 5 * of this software and associated documentation files (the "Software"), to deal
aerialspecs 0:42e6dbd4dbeb 6 * in the Software without restriction, including without limitation the rights
aerialspecs 0:42e6dbd4dbeb 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
aerialspecs 0:42e6dbd4dbeb 8 * copies of the Software, and to permit persons to whom the Software is
aerialspecs 0:42e6dbd4dbeb 9 * furnished to do so, subject to the following conditions:
aerialspecs 0:42e6dbd4dbeb 10 *
aerialspecs 0:42e6dbd4dbeb 11 * The above copyright notice and this permission notice shall be included in all
aerialspecs 0:42e6dbd4dbeb 12 * copies or substantial portions of the Software.
aerialspecs 0:42e6dbd4dbeb 13 *
aerialspecs 0:42e6dbd4dbeb 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
aerialspecs 0:42e6dbd4dbeb 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
aerialspecs 0:42e6dbd4dbeb 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
aerialspecs 0:42e6dbd4dbeb 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
aerialspecs 0:42e6dbd4dbeb 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
aerialspecs 0:42e6dbd4dbeb 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
aerialspecs 0:42e6dbd4dbeb 20 * SOFTWARE.
aerialspecs 0:42e6dbd4dbeb 21 */
aerialspecs 0:42e6dbd4dbeb 22
aerialspecs 0:42e6dbd4dbeb 23 #ifndef ARRAYLIST_H_
aerialspecs 0:42e6dbd4dbeb 24 #define ARRAYLIST_H_
aerialspecs 0:42e6dbd4dbeb 25
aerialspecs 0:42e6dbd4dbeb 26
aerialspecs 0:42e6dbd4dbeb 27 #include "stdint.h"
aerialspecs 0:42e6dbd4dbeb 28 #include "Iterator.h"
aerialspecs 0:42e6dbd4dbeb 29
aerialspecs 0:42e6dbd4dbeb 30 namespace com {
aerialspecs 0:42e6dbd4dbeb 31 namespace aerialspecs {
aerialspecs 0:42e6dbd4dbeb 32 namespace mbed {
aerialspecs 0:42e6dbd4dbeb 33 namespace sketchlet {
aerialspecs 0:42e6dbd4dbeb 34
aerialspecs 0:42e6dbd4dbeb 35 /**
aerialspecs 0:42e6dbd4dbeb 36 * \brief Class to represent a simple list of elements in an array.
aerialspecs 0:42e6dbd4dbeb 37 *
aerialspecs 0:42e6dbd4dbeb 38 * \author Robert R Murrell
aerialspecs 0:42e6dbd4dbeb 39 */
aerialspecs 0:42e6dbd4dbeb 40 template <class T>
aerialspecs 0:42e6dbd4dbeb 41 class ArrayList {
aerialspecs 0:42e6dbd4dbeb 42 public:
aerialspecs 0:42e6dbd4dbeb 43 /**
aerialspecs 0:42e6dbd4dbeb 44 * \brief Default Constructor. Creates an ArrayList with an array size of 4.
aerialspecs 0:42e6dbd4dbeb 45 */
aerialspecs 0:42e6dbd4dbeb 46 ArrayList();
aerialspecs 0:42e6dbd4dbeb 47
aerialspecs 0:42e6dbd4dbeb 48 /**
aerialspecs 0:42e6dbd4dbeb 49 * \brief Creates a new ArrayList with an array size specified by usize.
aerialspecs 0:42e6dbd4dbeb 50 *
aerialspecs 0:42e6dbd4dbeb 51 * \param usize An unsigned byte specifying the array size, or the maximum number
aerialspecs 0:42e6dbd4dbeb 52 * of elements this array can have.
aerialspecs 0:42e6dbd4dbeb 53 */
aerialspecs 0:42e6dbd4dbeb 54 ArrayList(uint8_t usize);
aerialspecs 0:42e6dbd4dbeb 55
aerialspecs 0:42e6dbd4dbeb 56 /**
aerialspecs 0:42e6dbd4dbeb 57 * \brief Appends an element to the and of the array.
aerialspecs 0:42e6dbd4dbeb 58 *
aerialspecs 0:42e6dbd4dbeb 59 * This is a template method so elements in an ArrayList will be strongly typed.
aerialspecs 0:42e6dbd4dbeb 60 *
aerialspecs 0:42e6dbd4dbeb 61 * \param element The element to add to the array.
aerialspecs 0:42e6dbd4dbeb 62 *
aerialspecs 0:42e6dbd4dbeb 63 * This method will increment the internal index by 1.
aerialspecs 0:42e6dbd4dbeb 64 */
aerialspecs 0:42e6dbd4dbeb 65 virtual void append(T element);
aerialspecs 0:42e6dbd4dbeb 66
aerialspecs 0:42e6dbd4dbeb 67 virtual T get(uint8_t at);
aerialspecs 0:42e6dbd4dbeb 68
aerialspecs 0:42e6dbd4dbeb 69 /**
aerialspecs 0:42e6dbd4dbeb 70 * \brief Returns the number of element in the array.
aerialspecs 0:42e6dbd4dbeb 71 *
aerialspecs 0:42e6dbd4dbeb 72 * \return internal index + 1.
aerialspecs 0:42e6dbd4dbeb 73 */
aerialspecs 0:42e6dbd4dbeb 74 virtual uint8_t length();
aerialspecs 0:42e6dbd4dbeb 75
aerialspecs 0:42e6dbd4dbeb 76 /**
aerialspecs 0:42e6dbd4dbeb 77 * \brief Returns the maximum number of elements this ArrayList can hold.
aerialspecs 0:42e6dbd4dbeb 78 *
aerialspecs 0:42e6dbd4dbeb 79 * \return usize.
aerialspecs 0:42e6dbd4dbeb 80 */
aerialspecs 0:42e6dbd4dbeb 81 virtual uint8_t size();
aerialspecs 0:42e6dbd4dbeb 82
aerialspecs 0:42e6dbd4dbeb 83 /**
aerialspecs 0:42e6dbd4dbeb 84 * \brief Creates a new Iterator for this ArrayList.
aerialspecs 0:42e6dbd4dbeb 85 *
aerialspecs 0:42e6dbd4dbeb 86 * The Iterator is a "point-in-time" iterator in that the iterator can only count to
aerialspecs 0:42e6dbd4dbeb 87 * the length at the time of it's creation. An invocation of this method followed by
aerialspecs 0:42e6dbd4dbeb 88 * an addition of an element will not be reflected in the Iterator. Iterator is also
aerialspecs 0:42e6dbd4dbeb 89 * a template concept and will be strongly typed the same as this ArrayList.
aerialspecs 0:42e6dbd4dbeb 90 *
aerialspecs 0:42e6dbd4dbeb 91 * \return A new instance of Iterator. The caller must delete this Iterator when complete.
aerialspecs 0:42e6dbd4dbeb 92 */
aerialspecs 0:42e6dbd4dbeb 93 virtual Iterator<T>* iterate();
aerialspecs 0:42e6dbd4dbeb 94
aerialspecs 0:42e6dbd4dbeb 95 virtual ~ArrayList();
aerialspecs 0:42e6dbd4dbeb 96
aerialspecs 0:42e6dbd4dbeb 97 private:
aerialspecs 0:42e6dbd4dbeb 98 uint8_t usize;
aerialspecs 0:42e6dbd4dbeb 99 uint8_t index;
aerialspecs 0:42e6dbd4dbeb 100 T* elements;
aerialspecs 0:42e6dbd4dbeb 101 };
aerialspecs 0:42e6dbd4dbeb 102
aerialspecs 0:42e6dbd4dbeb 103 }}}}
aerialspecs 0:42e6dbd4dbeb 104
aerialspecs 0:42e6dbd4dbeb 105 #endif /* ARRAYLIST_H_ */