1 /*
2     SPDX-FileCopyrightText: 2008 Akarsh Simha <akarshsimha@gmail.com>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include <QDebug>
8 
9 #include "starblock.h"
10 #include "skyobjects/starobject.h"
11 #include "starcomponent.h"
12 #include "skyobjects/stardata.h"
13 #include "skyobjects/deepstardata.h"
14 
15 #ifdef KSTARS_LITE
16 #include "skymaplite.h"
17 #include "kstarslite/skyitems/skynodes/pointsourcenode.h"
18 
StarNode()19 StarNode::StarNode() : starNode(0)
20 {
21 }
22 
~StarNode()23 StarNode::~StarNode()
24 {
25     if (starNode)
26     {
27         SkyMapLite::Instance()->deleteSkyNode(starNode);
28         qDebug() << "REAL NODE DESTRUCTOR";
29     }
30 }
31 #endif
32 
StarBlock(int nstars)33 StarBlock::StarBlock(int nstars)
34     : faintMag(-5), brightMag(35), parent(nullptr), prev(nullptr), next(nullptr), drawID(0), nStars(0),
35 #ifdef KSTARS_LITE
36       stars(nstars, StarNode())
37 #else
38       stars(nstars, StarObject())
39 #endif
40 {
41 }
42 
reset()43 void StarBlock::reset()
44 {
45     if (parent)
46         parent->releaseBlock(this);
47 
48     parent    = nullptr;
49     faintMag  = -5.0;
50     brightMag = 35.0;
51     nStars    = 0;
52 }
53 
54 #ifdef KSTARS_LITE
addStar(const StarData & data)55 StarNode *StarBlock::addStar(const StarData &data)
56 {
57     if (isFull())
58         return 0;
59     StarNode &node   = stars[nStars++];
60     StarObject &star = node.star;
61 
62     star.init(&data);
63     if (star.mag() > faintMag)
64         faintMag = star.mag();
65     if (star.mag() < brightMag)
66         brightMag = star.mag();
67     return &node;
68 }
69 
addStar(const DeepStarData & data)70 StarNode *StarBlock::addStar(const DeepStarData &data)
71 {
72     if (isFull())
73         return 0;
74     StarNode &node   = stars[nStars++];
75     StarObject &star = node.star;
76 
77     star.init(&data);
78     if (star.mag() > faintMag)
79         faintMag = star.mag();
80     if (star.mag() < brightMag)
81         brightMag = star.mag();
82     return &node;
83 }
84 #else
addStar(const StarData & data)85 StarObject *StarBlock::addStar(const StarData &data)
86 {
87     if (isFull())
88         return nullptr;
89     StarObject &star = stars[nStars++];
90 
91     star.init(&data);
92     if (star.mag() > faintMag)
93         faintMag = star.mag();
94     if (star.mag() < brightMag)
95         brightMag = star.mag();
96     return &star;
97 }
98 
addStar(const DeepStarData & data)99 StarObject *StarBlock::addStar(const DeepStarData &data)
100 {
101     if (isFull())
102         return nullptr;
103     StarObject &star = stars[nStars++];
104 
105     star.init(&data);
106     if (star.mag() > faintMag)
107         faintMag = star.mag();
108     if (star.mag() < brightMag)
109         brightMag = star.mag();
110     return &star;
111 }
112 #endif
113