LSSTApplications
20.0.0
LSSTDataManagementBasePackage
stack
1a1d771
Linux64
afw
20.0.0
src
table
IdFactory.cc
Go to the documentation of this file.
1
#include <memory>
2
#include "boost/format.hpp"
3
4
#include "
lsst/pex/exceptions.h
"
5
#include "
lsst/afw/table/IdFactory.h
"
6
7
namespace
lsst
{
8
namespace
afw
{
9
namespace
table {
10
11
namespace
{
12
13
class
SimpleIdFactory :
public
IdFactory {
14
public
:
15
RecordId
operator()()
override
{
return
++_current; }
16
17
void
notify(
RecordId
id
)
override
{ _current =
id
; }
18
19
std::shared_ptr<IdFactory>
clone
()
const override
{
return
std::make_shared<SimpleIdFactory>(*
this
); }
20
21
SimpleIdFactory() : _current(0) {}
22
23
private
:
24
RecordId
_current;
25
};
26
27
class
SourceIdFactory :
public
IdFactory {
28
public
:
29
RecordId
operator()()
override
{
30
if
(++_lower & _upperMask) {
31
--_lower;
32
throw
LSST_EXCEPT
(pex::exceptions::LengthError,
33
(
boost::format
(
"Next ID '%s' is too large for the number of reserved bits"
) %
34
(_lower + 1))
35
.str());
36
}
37
return
_upper | _lower;
38
}
39
40
void
notify(
RecordId
id
)
override
{
41
RecordId
newLower =
id
& (~_upper);
// chop off the exact exposure ID
42
if
(newLower & _upperMask) {
43
throw
LSST_EXCEPT
(
44
pex::exceptions::InvalidParameterError,
45
(
boost::format
(
"Explicit ID '%s' does not have the correct form."
) % newLower).str());
46
}
47
_lower = newLower;
48
}
49
50
std::shared_ptr<IdFactory>
clone
()
const override
{
return
std::make_shared<SourceIdFactory>(*
this
); }
51
52
SourceIdFactory(
RecordId
expId,
int
reserved)
53
: _upper(expId << reserved),
54
_upperMask(
std
::numeric_limits<
RecordId
>::
max
() << reserved),
55
_lower(0) {
56
if
(_upper >> reserved != expId) {
57
throw
LSST_EXCEPT
(pex::exceptions::InvalidParameterError,
58
(
boost::format
(
"Exposure ID '%s' is too large."
) % expId).str());
59
}
60
}
61
62
private
:
63
RecordId
const
_upper;
64
RecordId
const
_upperMask;
65
RecordId
_lower;
66
};
67
68
}
// namespace
69
70
std::shared_ptr<IdFactory>
IdFactory::makeSimple
() {
return
std::make_shared<SimpleIdFactory>(); }
71
72
std::shared_ptr<IdFactory>
IdFactory::makeSource
(
RecordId
expId,
int
reserved) {
73
return
std::make_shared<SourceIdFactory>(expId, reserved);
74
}
75
}
// namespace table
76
}
// namespace afw
77
}
// namespace lsst
lsst::afw::table::IdFactory::makeSource
static std::shared_ptr< IdFactory > makeSource(RecordId expId, int reserved)
Return an IdFactory that includes another, fixed ID in the higher-order bits.
Definition:
IdFactory.cc:72
std::shared_ptr
STL class.
lsst::afw::table::RecordId
std::int64_t RecordId
Type used for unique IDs for records.
Definition:
misc.h:22
lsst::afw::table::IdFactory::makeSimple
static std::shared_ptr< IdFactory > makeSimple()
Return a simple IdFactory that simply counts from 1.
Definition:
IdFactory.cc:70
pex.config.history.format
def format(config, name=None, writeSourceLine=True, prefix="", verbose=False)
Definition:
history.py:174
lsst::afw
Definition:
imageAlgorithm.dox:1
id
table::Key< int > id
Definition:
Detector.cc:162
IdFactory.h
max
int max
Definition:
BoundedField.cc:104
std::int64_t
lsst
A base class for image defects.
Definition:
imageAlgorithm.dox:1
LSST_EXCEPT
#define LSST_EXCEPT(type,...)
Create an exception with a given type.
Definition:
Exception.h:48
std
STL namespace.
lsst::afw::image.slicing.clone
clone
Definition:
slicing.py:257
exceptions.h
Generated on Wed Jun 24 2020 18:10:05 for LSSTApplications by
1.8.18