Skip to content

Commit

Permalink
Move on-the-fly negation into 'node_stream' and 'node_random_access'
Browse files Browse the repository at this point in the history
This is the only place it is used, and there is no need to add the additional
instructions to every other instance
  • Loading branch information
SSoelvsten committed Jun 22, 2024
1 parent c508cf5 commit 4e8060a
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 62 deletions.
24 changes: 12 additions & 12 deletions src/adiar/internal/io/arc_stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ namespace adiar::internal
////////////////////////////////////////////////////////////////////////////
/// \brief Construct a stream attached to an arc file.
////////////////////////////////////////////////////////////////////////////
arc_stream(const levelized_file<arc>& file, bool negate = false)
arc_stream(const levelized_file<arc>& file)
{
attach(file, negate);
attach(file);
}

////////////////////////////////////////////////////////////////////////////
/// \brief Construct a stream unattached to a shared arc file.
////////////////////////////////////////////////////////////////////////////
arc_stream(const shared_ptr<levelized_file<arc>>& file, bool negate = false)
arc_stream(const shared_ptr<levelized_file<arc>>& file)
{
attach(file, negate);
attach(file);
}

////////////////////////////////////////////////////////////////////////////
Expand All @@ -77,12 +77,12 @@ namespace adiar::internal
/// \pre No `levelized_file_writer` is currently attached to this file.
////////////////////////////////////////////////////////////////////////////
void
attach(const levelized_file<arc>& f, const bool negate = false)
attach(const levelized_file<arc>& f)
{
// adiar_assert(f.semi_transposed);
parent_t::attach(f, negate);
_unread_terminals[negate ^ false] = f.number_of_terminals[false];
_unread_terminals[negate ^ true] = f.number_of_terminals[true];
parent_t::attach(f);
_unread_terminals[false] = f.number_of_terminals[false];
_unread_terminals[true] = f.number_of_terminals[true];
}

////////////////////////////////////////////////////////////////////////////
Expand All @@ -91,12 +91,12 @@ namespace adiar::internal
/// \pre No `levelized_file_writer` is currently attached to this file.
////////////////////////////////////////////////////////////////////////////
void
attach(const shared_ptr<levelized_file<arc>>& f, const bool negate = false)
attach(const shared_ptr<levelized_file<arc>>& f)
{
// adiar_assert(f->semi_transposed);
parent_t::attach(f, negate);
_unread_terminals[negate ^ false] = f->number_of_terminals[false];
_unread_terminals[negate ^ true] = f->number_of_terminals[true];
parent_t::attach(f);
_unread_terminals[false] = f->number_of_terminals[false];
_unread_terminals[true] = f->number_of_terminals[true];
}

public:
Expand Down
32 changes: 11 additions & 21 deletions src/adiar/internal/io/file_stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,6 @@ namespace adiar::internal
////////////////////////////////////////////////////////////////////////////////////////////////
mutable bool _has_peeked = false;

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Whether elements should be \em negated on-the-fly.
////////////////////////////////////////////////////////////////////////////////////////////////
bool _negate = false;

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief TPIE's file stream object to read the file with.
////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -76,17 +71,17 @@ namespace adiar::internal
////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Construct attached to a given shared `file<value_type>`.
////////////////////////////////////////////////////////////////////////////////////////////////
file_stream(const file<value_type>& f, bool negate = false)
file_stream(const file<value_type>& f)
{
attach(f, negate);
attach(f);
}

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Construct attached to a given shared `file<value_type>`.
////////////////////////////////////////////////////////////////////////////////////////////////
file_stream(const adiar::shared_ptr<file<value_type>>& f, bool negate = false)
file_stream(const adiar::shared_ptr<file<value_type>>& f)
{
attach(f, negate);
attach(f);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -100,7 +95,7 @@ namespace adiar::internal
protected:
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(const file<value_type>& f, const adiar::shared_ptr<void>& shared_ptr, bool negate)
attach(const file<value_type>& f, const adiar::shared_ptr<void>& shared_ptr)
{
// Detach from prior file, if any.
if (attached()) { detach(); }
Expand All @@ -115,9 +110,6 @@ namespace adiar::internal
// Open the stream to the file
_stream.open(f._tpie_file, file<value_type>::read_access);
reset();

// Store negation flag.
_negate = negate;
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -132,9 +124,9 @@ namespace adiar::internal
/// \pre No `file_writer` is currently attached to this file.
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(const file<value_type>& f, bool negate = false)
attach(const file<value_type>& f)
{
attach(f, nullptr, negate);
attach(f, nullptr);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -143,9 +135,9 @@ namespace adiar::internal
/// \pre No `file_writer` is currently attached to this file.
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(const adiar::shared_ptr<file<value_type>>& f, bool negate = false)
attach(const adiar::shared_ptr<file<value_type>>& f)
{
attach(*f, f, negate);
attach(*f, f);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -207,13 +199,11 @@ namespace adiar::internal
const value_type
__read()
{
value_type v;
if constexpr (Reverse) {
v = _stream.read_back();
return _stream.read_back();
} else {
v = _stream.read();
return _stream.read();
}
return _negate ? !v : v;
}

public:
Expand Down
21 changes: 10 additions & 11 deletions src/adiar/internal/io/levelized_file_stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,18 +59,17 @@ namespace adiar::internal
////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Create attached to a levelized file.
////////////////////////////////////////////////////////////////////////////////////////////////
levelized_file_stream(const levelized_file<value_type>& lf, const bool negate = false)
levelized_file_stream(const levelized_file<value_type>& lf)
{
attach(lf, negate);
attach(lf);
}

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Create attached to a shared levelized file.
////////////////////////////////////////////////////////////////////////////////////////////////
levelized_file_stream(const shared_ptr<levelized_file<value_type>>& lf,
const bool negate = false)
levelized_file_stream(const shared_ptr<levelized_file<value_type>>& lf)
{
attach(lf, negate);
attach(lf);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -85,12 +84,12 @@ namespace adiar::internal
/// \pre No `levelized_file_writer` is currently attached to this file.
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(const levelized_file<value_type>& f, const bool negate = false)
attach(const levelized_file<value_type>& f)
{
if (!f.exists()) f.__touch();

for (size_t s_idx = 0; s_idx < streams; s_idx++)
_streams[s_idx].attach(f._files[s_idx], nullptr, negate);
_streams[s_idx].attach(f._files[s_idx], nullptr);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -99,12 +98,12 @@ namespace adiar::internal
/// \pre No `levelized_file_writer` is currently attached to this file.
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(const shared_ptr<levelized_file<value_type>>& f, const bool negate = false)
attach(const shared_ptr<levelized_file<value_type>>& f)
{
if (!f->exists()) f->touch();

for (size_t s_idx = 0; s_idx < streams; s_idx++)
_streams[s_idx].attach(f->_files[s_idx], f, negate);
_streams[s_idx].attach(f->_files[s_idx], f);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -262,7 +261,7 @@ namespace adiar::internal
attach(const levelized_file<value_type, false>& lf)
{
if (!lf.exists()) lf.__touch();
parent_type::attach(lf._level_info_file, nullptr, false);
parent_type::attach(lf._level_info_file, nullptr);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -273,7 +272,7 @@ namespace adiar::internal
attach(const adiar::shared_ptr<levelized_file<value_type, false>>& lf)
{
if (!lf->exists()) lf->touch();
parent_type::attach(lf->_level_info_file, lf, false);
parent_type::attach(lf->_level_info_file, lf);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
6 changes: 3 additions & 3 deletions src/adiar/internal/io/node_arc_random_access.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ namespace adiar::internal
: parent_type(f, negate)
{
// adiar_assert(f.indexable);
adiar_assert(negate == false);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -49,6 +50,7 @@ namespace adiar::internal
: parent_type(f, negate)
{
// adiar_assert(f->indexable);
adiar_assert(negate == false);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -58,9 +60,7 @@ namespace adiar::internal
////////////////////////////////////////////////////////////////////////////////////////////////
node_arc_random_access(const __dd& diagram)
: node_arc_random_access(diagram.template get<__dd::shared_arc_file_type>(), diagram._negate)
{
// adiar_assert(diagram->indexable);
}
{}

public:
////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
29 changes: 20 additions & 9 deletions src/adiar/internal/io/node_arc_stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,19 @@ namespace adiar::internal
using value_type = node;

private:
////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Arc-based input to-be converted into nodes on-the-fly.
////////////////////////////////////////////////////////////////////////////////////////////////
arc_stream<!Reverse> _stream;

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Whether a converted node has been buffered.
////////////////////////////////////////////////////////////////////////////////////////////////
bool _has_peeked = false;

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Latest converted node.
////////////////////////////////////////////////////////////////////////////////////////////////
node _peeked;

public:
Expand Down Expand Up @@ -63,19 +69,23 @@ namespace adiar::internal
////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Create attached to an arc file.
////////////////////////////////////////////////////////////////////////////////////////////////
node_arc_stream(levelized_file<arc>& file, const bool negate = false)
node_arc_stream(levelized_file<arc>& file,
[[maybe_unused]] const bool negate = false)
: _stream(/*need to sort before attach*/)
{
attach(file, negate);
adiar_assert(negate == false);
attach(file);
}

////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief Create attached to a shared arc file.
////////////////////////////////////////////////////////////////////////////////////////////////
node_arc_stream(const shared_ptr<levelized_file<arc>>& file, const bool negate = false)
node_arc_stream(const shared_ptr<levelized_file<arc>>& file,
[[maybe_unused]] const bool negate = false)
: _stream(/*need to sort before attach*/)
{
attach(file, negate);
adiar_assert(negate == false);
attach(file);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -87,7 +97,8 @@ namespace adiar::internal
: _stream(/*need to sort before attach*/)
{
adiar_assert(diagram.template has<__dd::shared_arc_file_type>());
attach(diagram.template get<__dd::shared_arc_file_type>(), diagram._negate);
adiar_assert(diagram._negate == false);
attach(diagram.template get<__dd::shared_arc_file_type>());
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -96,13 +107,13 @@ namespace adiar::internal
/// \remark This sorts the internal arcs of the file.
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(levelized_file<arc>& file, const bool negate = false)
attach(levelized_file<arc>& file)
{
if (file.semi_transposed) {
file.sort<arc_source_lt>(idx__internal);
file.semi_transposed = false;
}
_stream.attach(file, negate);
_stream.attach(file);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand All @@ -111,13 +122,13 @@ namespace adiar::internal
/// \remark This sorts the internal arcs of the file.
////////////////////////////////////////////////////////////////////////////////////////////////
void
attach(const shared_ptr<levelized_file<arc>>& file, const bool negate = false)
attach(const shared_ptr<levelized_file<arc>>& file)
{
if (file->semi_transposed) {
file->sort<arc_source_lt>(idx__internal);
file->semi_transposed = false;
}
_stream.attach(file, negate);
_stream.attach(file);
}

////////////////////////////////////////////////////////////////////////////////////////////////
Expand Down
Loading

0 comments on commit 4e8060a

Please sign in to comment.