Skip to content

Commit

Permalink
Basic Gravel Functionality Defined but not extensively tested
Browse files Browse the repository at this point in the history
  • Loading branch information
SamuelBayliss committed May 28, 2013
1 parent df25033 commit 6afc470
Show file tree
Hide file tree
Showing 37 changed files with 2,395 additions and 63 deletions.
64 changes: 64 additions & 0 deletions src/Actor.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#include <gravel/private/Actor.h>

void Gravel::GraphNode::connect(boost::weak_ptr<Gravel::GraphNode> na, boost::weak_ptr<Gravel::GraphNode> nb) {

}

Gravel::GraphNode::GraphNode() {

}

Gravel::GraphNode::~GraphNode() {

}

Gravel::GraphNode::BackMap Gravel::GraphNode::back;
Gravel::GraphNode::ParentMap Gravel::GraphNode::parent;

boost::weak_ptr<Gravel::GraphNode> Gravel::Actor::getOutput() const {

Gravel::GraphNode::NodeMap::const_iterator nit = nodes.find(Gravel::Output);
if (nit == nodes.end()) {
assert(false);
} else {
return boost::weak_ptr<Gravel::GraphNode>(nit->second);
}


}

Gravel::GraphNode::BackMapRange Gravel::GraphNode::getConnections(NodePtr np) {
return Gravel::GraphNode::back.equal_range(np);
}

Gravel::GraphNode::ConstNodeRange Gravel::Actor::getInputs() const {

return nodes.equal_range(Gravel::Input);


}

void Gravel::Actor::setWidth(Gravel::GraphNode::NodePtr node, unsigned width) {

}

Gravel::Pointer::Actor Gravel::GraphNode::getParent(Gravel::GraphNode::NodePtr np) {

std::map<Gravel::GraphNode::NodePtr, Gravel::Pointer::Actor>::iterator nit = parent.find(np);

if(nit == parent.end()) {
// throw exception
} else {
return nit->second;
}



};

void Gravel::GraphNode::setParents(Gravel::Pointer::Actor ptr) {

Gravel::GraphNode::ConstNodeRange inputs = ptr->getInputs();
Gravel::GraphNode::NodePtr output = ptr->getOutput();

}
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@


set (GRAVEL_SRC Context Module Object Symbol)
set (GRAVEL_SRC Context Module Object Symbol Expression Actor)
set (CODEGEN_SRC codegen/Generator
codegen/Definitions
codegen/SequentialModule
Expand Down
148 changes: 144 additions & 4 deletions src/Context.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <algorithm>
#include <functional>
#include <string>

#include <sstream>
Gravel::Context * Gravel::Context::pInstance = NULL;

Gravel::Context * Gravel::Context::getInstance()
Expand All @@ -16,7 +16,7 @@ Gravel::Context * Gravel::Context::getInstance()
return pInstance;
}

Gravel::Context::Context() {
Gravel::Context::Context() : tempIdentifier(0) {

}
struct name_matches : public std::binary_function<Gravel::Module, std::string, bool> {
Expand Down Expand Up @@ -48,7 +48,7 @@ bool Gravel::Context::exists(const Gravel::Module& module) {

}

void Gravel::Context::insert(const Gravel::Module& module, const Gravel::Symbol symbol, const Gravel::SymbolInterface::Direction& direction) {
void Gravel::Context::insert(const Gravel::Module& module, const Gravel::Symbol symbol, const Gravel::Interface::Symbol::Direction& direction) {
SymbolKey key(module, direction);
sm.insert(std::pair<SymbolKey, Symbol>(key, symbol));
}
Expand All @@ -60,7 +60,7 @@ struct symbol_matches : public std::binary_function<std::pair<const Gravel::Symb
};


bool Gravel::Context::exists(const Gravel::Module& module, const Gravel::Symbol symbol, const Gravel::SymbolInterface::Direction& direction) {
bool Gravel::Context::exists(const Gravel::Module& module, const Gravel::Symbol symbol, const Gravel::Interface::Symbol::Direction& direction) {
SymbolKey key(module, direction);
ConstSymbolRange sr = sm.equal_range(key);

Expand All @@ -74,6 +74,35 @@ Gravel::ConstModuleList Gravel::Context::getModules() const {
return ml;
}

Gravel::ConstSymbolList Gravel::Context::getSymbols(const Gravel::Module& module) const {
Gravel::ConstSymbolMapIterator mit;

Gravel::SymbolList sl;

for (mit = sm.begin() ; mit != sm.end() ; mit++ ) {
Gravel::SymbolKey sk = mit->first;

if (sk.first == module) {
sl.insert(mit->second);
}

}
return sl;
}

Gravel::ConstExpressionList Gravel::Context::getExpressions(const Gravel::Module& module) const {
Gravel::ConstExpressionMapIterator mit;

Gravel::ExpressionList el;

for (mit = em.begin() ; mit != em.end() ; mit++ ) {
if (mit->second == module) {
el.insert(mit->first);
}
}
return el;
}

Gravel::ConstSymbolRange Gravel::Context::getSymbols(Gravel::Module module, Symbol::Direction direction) const {
SymbolKey key(module, direction);
return sm.equal_range(key);
Expand All @@ -87,6 +116,117 @@ void Gravel::Context::emit(std::ostream& os) {

}

void Gravel::Context::printSymbols(std::ostream& os) {
Gravel::SymbolMapIterator sit;
for (sit = sm.begin() ; sit != sm.end() ; sit++) {
Gravel::SymbolKey key = sit->first;
Gravel::Symbol symbol = sit->second;
os << symbol << "\n";
}

}

bool Gravel::Context::isOwned(const Gravel::Symbol& symbol) {
normalize();

Gravel::ConstSymbolMapIterator mit;
for (mit = sm.begin() ; mit != sm.end() ; mit++ ) {
if (mit->second == symbol) {
return true;
}
}
return false;
}

bool Gravel::Context::isOwned(const Gravel::Expression& expression) {
normalize();

Gravel::ConstExpressionMapIterator mit;
for (mit = em.begin() ; mit != em.end() ; mit++ ) {
if (mit->first == expression) {
return true;
}
}
return false;
}


Gravel::Module Gravel::Context::owner(const Gravel::Symbol&) {

}

Gravel::Module Gravel::Context::owner(const Gravel::Expression&) {

}


void find_edges(const Gravel::Module& module, const Gravel::Symbol& symbol) {

// register symbol with module

// add all the inputs and outputs for this symbol to symbol and expression lists(registering them with module)



}
void find_edges(const Gravel::Module& module, const Gravel::Expression& expression) {
// register symbol with module

// add all the inputs and outputs for this expression to symbol and expression lists(registering them with module)
}

unsigned add_edges(const Gravel::Module& module) {

Gravel::Context * ctx = Gravel::Context::getInstance();

Gravel::ConstSymbolList sl = ctx->getSymbols(module);
Gravel::ConstExpressionList el = ctx->getExpressions(module);

unsigned size = sl.size() + el.size();

for (Gravel::ConstSymbolList::iterator cslit = sl.begin() ; cslit != sl.end() ; cslit++) {
find_edges(module, *cslit);
}
for (Gravel::ConstExpressionList::iterator celit = el.begin() ; celit != el.end() ; celit++) {
find_edges(module, *celit);
}

return sl.size() + el.size() - size;
}

std::string Gravel::Context::getUniqueIdentifier() {
std::stringstream ss;
ss << "tmp_" << tempIdentifier++ ;

return ss.str();

}

void Gravel::Context::normalize() {

Gravel::ModuleList::iterator mlit;

for(mlit = ml.begin() ; mlit != ml.end() ; mlit++) {

while ( add_edges(*mlit) != 0) {;}

}

// go through all modules
// collect all registered nodes
// register all edges from those nodes
// repeat until number of additional edges is 0.


}

void Gravel::Context::reset() {
// resets the test fixture
ml.clear();
sm.clear();
tempIdentifier = 0;
}

bool Gravel::Context::elaborate() {
// create .gravel folder if it doesn't exist
// emit files to temporary file
Expand Down
Loading

0 comments on commit 6afc470

Please sign in to comment.