Skip to content

Commit bb913e4

Browse files
committed
Updates for new type-safe IDTable design
1 parent 1505cf6 commit bb913e4

9 files changed

Lines changed: 34 additions & 39 deletions

File tree

src/ngscopeclient/FilterGraphEditor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2313,7 +2313,7 @@ void FilterGraphEditor::HandleDoubleClicks()
23132313
return;
23142314

23152315
//Spawn the appropriate dialog
2316-
auto node = static_cast<FlowGraphNode*>(m_session.m_idtable[(uintptr_t)id]);
2316+
auto node = m_session.m_idtable.Lookup<FlowGraphNode*>(static_cast<uintptr_t>(id));
23172317
auto trig = dynamic_cast<Trigger*>(node);
23182318
auto ochan = dynamic_cast<OscilloscopeChannel*>(node);
23192319
auto bo = dynamic_cast<BERTOutputChannel*>(node);
@@ -2360,7 +2360,7 @@ bool FilterGraphEditor::HandleNodeProperties()
23602360

23612361
else
23622362
{
2363-
auto node = static_cast<FlowGraphNode*>(m_session.m_idtable[(uintptr_t)id]);
2363+
auto node = m_session.m_idtable.Lookup<FlowGraphNode*>(static_cast<uintptr_t>(id));
23642364
auto trig = dynamic_cast<Trigger*>(node);
23652365
auto o = dynamic_cast<OscilloscopeChannel*>(node);
23662366
auto f = dynamic_cast<Filter*>(o);

src/ngscopeclient/FilterGraphEditor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class lessIDPair
7474

7575
class FilterGraphEditor;
7676

77-
class FilterGraphGroup
77+
class FilterGraphGroup : public SerializableObject
7878
{
7979
public:
8080

src/ngscopeclient/MainWindow.cpp

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2474,7 +2474,7 @@ bool MainWindow::LoadUIConfiguration(int version, const YAML::Node& node)
24742474
auto an = kt.second;
24752475
if(an["id"].as<int>() == aid)
24762476
{
2477-
auto channel = static_cast<OscilloscopeChannel*>(m_session.m_idtable[an["channel"].as<int>()]);
2477+
auto channel = m_session.m_idtable.Lookup<OscilloscopeChannel*>(an["channel"].as<int>());
24782478
if(!channel) //don't crash on bad IDs or missing filters
24792479
break;
24802480
size_t stream = 0;
@@ -2487,7 +2487,7 @@ bool MainWindow::LoadUIConfiguration(int version, const YAML::Node& node)
24872487
auto overlays = an["overlays"];
24882488
for(auto jt : overlays)
24892489
{
2490-
auto filter = static_cast<Filter*>(m_session.m_idtable[jt.second["id"].as<int>()]);
2490+
auto filter = m_session.m_idtable.Lookup<Filter*>(jt.second["id"].as<int>());
24912491
stream = 0;
24922492
if(jt.second["stream"])
24932493
stream = jt.second["stream"].as<int>();
@@ -2514,7 +2514,7 @@ bool MainWindow::LoadUIConfiguration(int version, const YAML::Node& node)
25142514
{
25152515
auto an = areas[string("area") + to_string(aid)];
25162516

2517-
auto channel = static_cast<OscilloscopeChannel*>(m_session.m_idtable[an["channel"].as<int>()]);
2517+
auto channel = m_session.m_idtable.Lookup<OscilloscopeChannel*>(an["channel"].as<int>());
25182518
if(!channel) //don't crash on bad IDs or missing filters
25192519
continue;
25202520
size_t stream = 0;
@@ -2527,7 +2527,7 @@ bool MainWindow::LoadUIConfiguration(int version, const YAML::Node& node)
25272527
auto overlays = an["overlays"];
25282528
for(auto jt : overlays)
25292529
{
2530-
auto filter = static_cast<Filter*>(m_session.m_idtable[jt.second["id"].as<int>()]);
2530+
auto filter = m_session.m_idtable.Lookup<Filter*>(jt.second["id"].as<int>());
25312531
stream = 0;
25322532
if(jt.second["stream"])
25332533
stream = jt.second["stream"].as<int>();
@@ -2549,7 +2549,7 @@ bool MainWindow::LoadUIConfiguration(int version, const YAML::Node& node)
25492549
auto streams = an["streams"];
25502550
for(auto jt : streams)
25512551
{
2552-
auto chan = static_cast<OscilloscopeChannel*>(m_session.m_idtable[jt.second["channel"].as<int>()]);
2552+
auto chan = m_session.m_idtable.Lookup<OscilloscopeChannel*>(jt.second["channel"].as<int>());
25532553
auto stream = jt.second["stream"].as<int>();
25542554
auto persist = jt.second["persistence"].as<bool>();
25552555
auto ramp = jt.second["colorRamp"].as<string>();
@@ -2626,7 +2626,7 @@ bool MainWindow::LoadUIConfiguration(int version, const YAML::Node& node)
26262626
}
26272627

26282628
m_measurementsDialog->AddStream(
2629-
StreamDescriptor(static_cast<OscilloscopeChannel*>(m_session.m_idtable[index]), stream));
2629+
StreamDescriptor(m_session.m_idtable.Lookup<OscilloscopeChannel*>(index), stream));
26302630
}
26312631
}
26322632

@@ -2659,7 +2659,7 @@ bool MainWindow::LoadDialogs(const YAML::Node& node)
26592659
filt = it.second["filter"].as<string>();
26602660
}
26612661

2662-
auto pd = static_cast<PacketDecoder*>(m_session.m_idtable[id]);
2662+
auto pd = m_session.m_idtable.Lookup<PacketDecoder*>(id);
26632663

26642664
auto dlg = make_shared<ProtocolAnalyzerDialog>(pd, m_session.GetPacketManager(pd), m_session, *this);
26652665
dlg->SetFilterExpression(filt);
@@ -2673,8 +2673,7 @@ bool MainWindow::LoadDialogs(const YAML::Node& node)
26732673
{
26742674
for(auto it : meters)
26752675
{
2676-
auto meter = dynamic_cast<SCPIMultimeter*>(
2677-
static_cast<Instrument*>(m_session.m_idtable[it.second.as<int>()]));
2676+
auto meter = dynamic_cast<SCPIMultimeter*>(m_session.m_idtable.Lookup<Instrument*>(it.second.as<int>()));
26782677
if(meter)
26792678
{
26802679
auto smeter = dynamic_pointer_cast<SCPIMultimeter>(meter->shared_from_this());
@@ -2693,8 +2692,7 @@ bool MainWindow::LoadDialogs(const YAML::Node& node)
26932692
{
26942693
for(auto it : generators)
26952694
{
2696-
auto gen = dynamic_cast<SCPIFunctionGenerator*>(
2697-
static_cast<Instrument*>(m_session.m_idtable[it.second.as<int>()]));
2695+
auto gen = dynamic_cast<SCPIFunctionGenerator*>(m_session.m_idtable.Lookup<Instrument*>(it.second.as<int>()));
26982696

26992697
if(gen)
27002698
{
@@ -2714,8 +2712,7 @@ bool MainWindow::LoadDialogs(const YAML::Node& node)
27142712
{
27152713
for(auto it : psus)
27162714
{
2717-
auto psu = dynamic_cast<SCPIPowerSupply*>(
2718-
static_cast<Instrument*>(m_session.m_idtable[it.second.as<int>()]));
2715+
auto psu = dynamic_cast<SCPIPowerSupply*>(m_session.m_idtable.Lookup<Instrument*>(it.second.as<int>()));
27192716

27202717
if(psu)
27212718
{
@@ -2735,8 +2732,7 @@ bool MainWindow::LoadDialogs(const YAML::Node& node)
27352732
{
27362733
for(auto it : berts)
27372734
{
2738-
auto bert = dynamic_cast<SCPIBERT*>(
2739-
static_cast<Instrument*>(m_session.m_idtable[it.second.as<int>()]));
2735+
auto bert = dynamic_cast<SCPIBERT*>(m_session.m_idtable.Lookup<Instrument*>(it.second.as<int>()));
27402736

27412737
if(bert)
27422738
{
@@ -2756,8 +2752,7 @@ bool MainWindow::LoadDialogs(const YAML::Node& node)
27562752
{
27572753
for(auto it : loads)
27582754
{
2759-
auto load = dynamic_cast<SCPILoad*>(
2760-
static_cast<Instrument*>(m_session.m_idtable[it.second.as<int>()]));
2755+
auto load = dynamic_cast<SCPILoad*>(m_session.m_idtable.Lookup<Instrument*>(it.second.as<int>()));
27612756

27622757
if(load)
27632758
{

src/ngscopeclient/Session.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ bool Session::LoadWaveformDataForFilters(
466466

467467
string datdir = filtdir + "/filter_" + to_string(id);
468468

469-
auto f = static_cast<OscilloscopeChannel*>(m_idtable[id]);
469+
auto f = m_idtable.Lookup<OscilloscopeChannel*>(id);
470470
if(!f)
471471
continue;
472472
for(size_t i=0; i<f->GetStreamCount(); i++)
@@ -481,11 +481,11 @@ bool Session::LoadWaveformDataForFilters(
481481
//TODO: we need to encode a digital path in the YAML once MemoryFilter has digital channel support
482482
//TODO: support non-analog/digital captures (eyes, spectrograms, etc)
483483

484-
WaveformBase* cap = NULL;
485-
SparseAnalogWaveform* sacap = NULL;
486-
UniformAnalogWaveform* uacap = NULL;
487-
//SparseDigitalWaveform* sdcap = NULL;
488-
//UniformDigitalWaveform* udcap = NULL;
484+
WaveformBase* cap = nullptr;
485+
SparseAnalogWaveform* sacap = nullptr;
486+
UniformAnalogWaveform* uacap = nullptr;
487+
//SparseDigitalWaveform* sdcap = nullptr;
488+
//UniformDigitalWaveform* udcap = nullptr;
489489
if(f->GetType(0) == Stream::STREAM_TYPE_ANALOG)
490490
{
491491
if(dense)
@@ -1010,7 +1010,7 @@ bool Session::LoadInstruments(int version, const YAML::Node& node, bool /*online
10101010
auto nick = inst["nick"].as<string>();
10111011
LogTrace("Loading instrument \"%s\"\n", nick.c_str());
10121012

1013-
auto pinst = reinterpret_cast<Instrument*>(m_idtable[inst["id"].as<uintptr_t>()]);
1013+
auto pinst = m_idtable.Lookup<Instrument*>(inst["id"].as<uintptr_t>());
10141014
if(!pinst)
10151015
continue;
10161016

@@ -1879,7 +1879,7 @@ bool Session::LoadTriggerGroups(const YAML::Node& node)
18791879
shared_ptr<TriggerGroup> group;
18801880
if(pri)
18811881
{
1882-
auto inst = reinterpret_cast<Instrument*>(m_idtable[pri.as<int64_t>()]);
1882+
auto inst = m_idtable.Lookup<Instrument*>(pri.as<int64_t>());
18831883
if(inst == nullptr)
18841884
{
18851885
LogWarning("null instrument loading trigger groups, skipping\n");
@@ -1892,7 +1892,7 @@ bool Session::LoadTriggerGroups(const YAML::Node& node)
18921892
auto snode = gnode["secondaries"];
18931893
for(auto jt : snode)
18941894
{
1895-
inst = reinterpret_cast<Instrument*>(m_idtable[jt.second.as<int64_t>()]);
1895+
inst = m_idtable.Lookup<Instrument*>(jt.second.as<int64_t>());
18961896
sscope = dynamic_pointer_cast<Oscilloscope>(inst->shared_from_this());
18971897
group->m_secondaries.push_back(sscope);
18981898
}
@@ -1906,7 +1906,7 @@ bool Session::LoadTriggerGroups(const YAML::Node& node)
19061906
group = make_shared<TriggerGroup>(nullptr, this);
19071907

19081908
for(auto fid : filters)
1909-
group->m_filters.push_back(reinterpret_cast<PausableFilter*>(m_idtable[fid.as<int64_t>()]));
1909+
group->m_filters.push_back(m_idtable.Lookup<PausableFilter*>(fid.as<int64_t>()));
19101910
}
19111911

19121912
m_triggerGroups.push_back(group);
@@ -2027,7 +2027,7 @@ bool Session::LoadFilters(int /*version*/, const YAML::Node& node)
20272027
for(auto it : node)
20282028
{
20292029
auto dnode = it.second;
2030-
auto filter = static_cast<Filter*>(m_idtable[dnode["id"].as<uintptr_t>()]);
2030+
auto filter = m_idtable.Lookup<Filter*>(dnode["id"].as<uintptr_t>());
20312031
if(filter)
20322032
filter->LoadInputs(dnode, m_idtable);
20332033
}
@@ -2049,7 +2049,7 @@ bool Session::LoadInstrumentInputs(int /*version*/, const YAML::Node& node)
20492049
auto nick = inst["nick"].as<string>();
20502050
LogTrace("Loading additional inputs for instrument \"%s\"\n", nick.c_str());
20512051

2052-
auto pinst = reinterpret_cast<Instrument*>(m_idtable[inst["id"].as<uintptr_t>()]);
2052+
auto pinst = m_idtable.Lookup<Instrument*>(inst["id"].as<uintptr_t>());
20532053
if(!pinst)
20542054
continue;
20552055

src/ngscopeclient/TriggerGroup.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* *
33
* ngscopeclient *
44
* *
5-
* Copyright (c) 2012-2024 Andrew D. Zonenberg and contributors *
5+
* Copyright (c) 2012-2025 Andrew D. Zonenberg and contributors *
66
* All rights reserved. *
77
* *
88
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
@@ -51,7 +51,7 @@
5151
Common reference clock supplied to all instruments in the group
5252
If instruments do not share a common clock, drift will worsen with increasing capture depth
5353
*/
54-
class TriggerGroup
54+
class TriggerGroup : public SerializableObject
5555
{
5656
public:
5757
enum TriggerType

src/ngscopeclient/WaveformArea.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ class DisplayedChannel
442442
443443
WaveformArea's auto resize, and will collectively fill the entire client area of their parent window.
444444
*/
445-
class WaveformArea
445+
class WaveformArea : public SerializableObject
446446
{
447447
public:
448448
WaveformArea(StreamDescriptor stream, std::shared_ptr<WaveformGroup> group, MainWindow* parent);

src/ngscopeclient/WaveformGroup.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
/**
4141
@brief A WaveformGroup is a container for one or more WaveformArea's.
4242
*/
43-
class WaveformGroup
43+
class WaveformGroup : public SerializableObject
4444
{
4545
public:
4646
WaveformGroup(MainWindow* parent, const std::string& title);

src/ngscopeclient/Workspace.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* *
33
* ngscopeclient *
44
* *
5-
* Copyright (c) 2012-2024 Andrew D. Zonenberg and contributors *
5+
* Copyright (c) 2012-2025 Andrew D. Zonenberg and contributors *
66
* All rights reserved. *
77
* *
88
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the *
@@ -37,7 +37,7 @@
3737

3838
class MainWindow;
3939

40-
class Workspace
40+
class Workspace : public SerializableObject
4141
{
4242
public:
4343
Workspace(const YAML::Node& node, Session& session, MainWindow* parent);

0 commit comments

Comments
 (0)