Skip to content
Snippets Groups Projects
Commit 21e5f5db authored by Radek Hušek's avatar Radek Hušek Committed by Radek Hušek
Browse files

Add compile time option SAVE_MEMORY

parent df13f946
No related branches found
No related tags found
No related merge requests found
default: groupConnectivity.so clean_obj default: groupConnectivity.so clean_obj
groupConnectivity.so: groupConnectivity.pyx group-connectivity.h setup.py groupConnectivity.so: groupConnectivity.pyx group-connectivity.h setup.py compileTimeOptions.h
python setup.py build_ext python setup.py build_ext
cp build/lib*/groupConnectivity.so . cp build/lib*/groupConnectivity.so .
......
#ifndef __COMPILE_TIME_OPTIONS_H__
#define __COMPILE_TIME_OPTIONS_H__
// bool; use vector<bool> instead of vector<size_t> for classes
#ifndef SAVE_MEMORY
#define SAVE_MEMORY 0
#endif
#endif
#ifndef __GROUP_CONNECTIVITY_H__ #ifndef __GROUP_CONNECTIVITY_H__
#define __GROUP_CONNECTIVITY_H__ #define __GROUP_CONNECTIVITY_H__
#include "compileTimeOptions.h"
namespace Ring { namespace Ring {
#define MakeRing(Name, Size, Plus, Negate, Multiply, One) \ #define MakeRing(Name, Size, Plus, Negate, Multiply, One) \
...@@ -24,7 +26,12 @@ MakeRing(Z2_2, 4, a^b, a, a&b, 3); ...@@ -24,7 +26,12 @@ MakeRing(Z2_2, 4, a^b, a, a&b, 3);
struct AbstractTester { struct AbstractTester {
bool isConnected; bool isConnected;
std::vector<size_t> classes; #if SAVE_MEMORY
typedef std::vector<bool> ClassesType;
#else
typedef std::vector<size_t> ClassesType;
#endif
ClassesType classes;
typedef int EdgeId; typedef int EdgeId;
typedef int DirectedEdgeId; typedef int DirectedEdgeId;
...@@ -75,7 +82,7 @@ struct Tester : public AbstractTester { ...@@ -75,7 +82,7 @@ struct Tester : public AbstractTester {
size_t num_classes = 1; size_t num_classes = 1;
edges_ = spanningTree.size(); edges_ = spanningTree.size();
while (edges_-- > 0) num_classes *= Ring::size; while (edges_-- > 0) num_classes *= Ring::size;
std::vector<size_t> C(num_classes, 0); ClassesType C(num_classes, 0);
C.swap(classes); C.swap(classes);
for (auto e : spanningTree) for (auto e : spanningTree)
...@@ -127,7 +134,13 @@ struct Tester : public AbstractTester { ...@@ -127,7 +134,13 @@ struct Tester : public AbstractTester {
virtual std::vector<size_t> getClasses() { virtual std::vector<size_t> getClasses() {
#if SAVE_MEMORY
std::vector<size_t> ret(classes.size());
for (size_t i = 0; i < classes.size(); i++) ret[i] = classes[i];
return ret;
#else
return classes; return classes;
#endif
} }
...@@ -135,9 +148,13 @@ struct Tester : public AbstractTester { ...@@ -135,9 +148,13 @@ struct Tester : public AbstractTester {
Mapping forb(edges, 0); Mapping forb(edges, 0);
for (size_t i = 0; i < numForb; i++) for (size_t i = 0; i < numForb; i++)
#if SAVE_MEMORY
classes[pack(cannonize(unpack(i, forb)))] = true;
#else
classes[pack(cannonize(unpack(i, forb)))]++; classes[pack(cannonize(unpack(i, forb)))]++;
#endif
for (auto &c : classes) if (!c) return (isConnected = false); for (const auto &c : classes) if (!c) return (isConnected = false);
return (isConnected = true); return (isConnected = true);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment