GCC Code Coverage Report
Directory: src/ Exec Total Coverage
File: src/resources/item/itemoptionslist.h Lines: 0 23 0.0 %
Date: 2021-03-17 Branches: 0 44 0.0 %

Line Branch Exec Source
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
27
#include "const/resources/item/itemoptions.h"
28
29
#include "resources/item/itemoption.h"
30
31
#include "localconsts.h"
32
33
struct ItemOptionsList final
34
{
35
    explicit ItemOptionsList(const size_t amount0) :
36
        options(nullptr),
37
        amount(amount0),
38
        pointer(0U)
39
    {
40
        options = new ItemOption[amount];
41
    }
42
43
    ItemOptionsList() :
44
        options(nullptr),
45
        amount(maxItemOptions),
46
        pointer(0U)
47
    {
48
        options = new ItemOption[amount];
49
    }
50
51
    A_DELETE_COPY(ItemOptionsList)
52
53
    ~ItemOptionsList()
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
98
    ItemOption *options;
99
    size_t amount;
100
    size_t pointer;
101
};
102
103
#endif  // RESOURCES_ITEM_ITEMOPTIONSLIST_H