ManaPlus
itemoptionslist.h
Go to the documentation of this file.
1 /*
2  * The ManaPlus Client
3  * Copyright (C) 2004-2009 The Mana World Development Team
4  * Copyright (C) 2009-2010 The Mana Developers
5  * Copyright (C) 2011-2019 The ManaPlus Developers
6  * Copyright (C) 2019-2021 Andrei Karas
7  *
8  * This file is part of The ManaPlus Client.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #ifndef RESOURCES_ITEM_ITEMOPTIONSLIST_H
25 #define RESOURCES_ITEM_ITEMOPTIONSLIST_H
26 
28 
30 
31 #include "localconsts.h"
32 
34 {
35  explicit ItemOptionsList(const size_t amount0) :
37  amount(amount0),
38  pointer(0U)
39  {
40  options = new ItemOption[amount];
41  }
42 
46  pointer(0U)
47  {
48  options = new ItemOption[amount];
49  }
50 
52 
54  {
55  delete [] options;
56  options = nullptr;
57  }
58 
59  void add(const uint16_t index,
60  const uint16_t value)
61  {
62  if (pointer >= amount)
63  return;
64  options[pointer].index = index;
65  options[pointer].value = value;
66  pointer ++;
67  }
68 
69  static ItemOptionsList *copy(const ItemOptionsList *const options0)
70  {
71  if (options0 == nullptr)
72  return nullptr;
73 
74  const size_t amount0 = options0->amount;
75  ItemOptionsList *const obj = new ItemOptionsList(amount0);
76  for (size_t f = 0; f < amount0; f ++)
77  {
78  obj->options[f].index = options0->options[f].index;
79  obj->options[f].value = options0->options[f].value;
80  }
81  obj->amount = options0->amount;
82  obj->pointer = options0->pointer;
83  return obj;
84  }
85 
86  size_t size() const
87  {
88  if (pointer < amount)
89  return pointer;
90  return amount;
91  }
92 
93  const ItemOption &get(const size_t index) const
94  {
95  return options[index];
96  }
97 
99  size_t amount;
100  size_t pointer;
101 };
102 
103 #endif // RESOURCES_ITEM_ITEMOPTIONSLIST_H
#define maxItemOptions
Definition: itemoptions.h:25
#define final
Definition: localconsts.h:46
#define A_DELETE_COPY(func)
Definition: localconsts.h:53
#define nullptr
Definition: localconsts.h:45
uint16_t index
Definition: itemoption.h:36
int16_t value
Definition: itemoption.h:37
void add(const uint16_t index, const uint16_t value)
const ItemOption & get(const size_t index) const
static ItemOptionsList * copy(const ItemOptionsList *const options0)
ItemOptionsList(const size_t amount0)
size_t size() const
ItemOption * options