Ejemplo n.º 1
0
// prepare data for testing
TautologyChecker::dat *TautologyChecker::parse(const char *input,dat *root,int &i,int &offset){
 // build tree, return it
 bool neg = false;
 bool isLeaf = false;
 dat *d = 0;
 for(;i<strlen(input);i++){
  d = 0;
  switch(input[i]){
   case 'N': neg = !neg;break;
   case '(':
    i++; //skip
    d = parse(input,d,i,offset);
    d->sign = !neg; // allow negating the whole tree
    neg = false;
    root = attachNode(root,d,1);
    break;
   case ')':
    continue; // return the subtree
   default:
    isLeaf = islower(input[i]);
    d = new dat; // build new node
    // new node isn't coming through pristine for some reason...
    d->left = 0;
    d->right = 0;
    d->sign = !neg;
    neg = false;
    if(isLeaf){
     try{
      assignments.at(input[i]);
     }catch(const std::out_of_range &e){ // value not found
      assignments[input[i]] = offset; // add assignment map
      mask |= (1<<offset++); // update mask
     }
     d->data = input[i];
    }else{
     d->data = input[i];
    }
    root = attachNode(root,d,isLeaf);
  }
 }
 return root;
};
Ejemplo n.º 2
0
void QNoLodQuad::build(int centerX, int centexY, int size)
{
    if(m_nLevel >= 2)
    {
        m_nLevel--;
        build(centerX - size / 2, centerY - size / 2, size / 2);
        build(centerX - size / 2, centerY + size / 2, size / 2);
        build(centerX + size / 2, centerY + size / 2, size / 2);
        build(centerX + size / 2, centerY - size / 2, size / 2);
    }
    else
    {
        attachNode(centerX, centexY);
    }
}
Ejemplo n.º 3
0
	TileMap::TileMap(Game& world, TextureManager& textureManager, const TMX& tmx)
		: BaseGameEntity(world, b2BodyDef())
		, mWorld(world)
		, mTextures()
		, mpCollider(nullptr)
		, mpNavGraph(nullptr)
		, mDrawFlags(0)
		, mCellSpaceNeighborhoodRange(1)
		, mpCellSpacePartition(nullptr)
	{
		setDrawOrder(std::numeric_limits<int>::max());

		std::vector<std::vector<sf::VertexArray>> layers;
		tmx.makeVertices(textureManager, mTextures, layers);
		for (auto it = layers.begin(); it != layers.end(); ++it)
		{
			int index = it - layers.begin();
			if (it->size() != mTextures.size()) {
				throw std::runtime_error("Texture and layer component counts are inconsistent.");
			}
			auto pLayer = std::make_unique<Layer>(mWorld, std::move(*it), mTextures);
			pLayer->setDrawOrder(index);
			attachNode(std::move(pLayer));
		}

		const sf::Transform& transform = getWorld().getPixelToWorldTransform();

		mpCollider = std::unique_ptr<CompositeCollider>(tmx.makeCollider(transform));

		mpNavGraph = std::unique_ptr<NavGraph>(tmx.makeNavGraph(transform));

		mCellSpaceNeighborhoodRange = calculateAverageGraphEdgeLength(*mpNavGraph) + 1;

		mpCellSpacePartition = std::make_unique<NavCellSpace>((float)tmx.getTileWidth() / tmx.getWidth(), (float)tmx.getTileHeight() * tmx.getHeight(), tmx.getWidth() / 4, tmx.getHeight() / 4, mpNavGraph->numNodes());

		TileMap::NavGraph::ConstNodeIterator nodeIter(*mpNavGraph);
		for (const TileMap::NavGraph::Node* pNode = nodeIter.begin(); !nodeIter.end(); pNode = nodeIter.next())
		{
			mpCellSpacePartition->addEntity(pNode);
		}

		std::vector<b2Fixture*> fixtures;
		mpCollider->createFixtures(getBody(), fixtures);
	}
Ejemplo n.º 4
0
//attaches a given suffix to the node
//Poor implementation, O(n^2)
void SuffixTree::attachSuffix(Node *parent, char * str)
{
    Node * curr = parent;
    bool placeFound = false; 
    int level = 0;
    int len = strlen(str);
    while(!placeFound) 
    {
        placeFound = true;
        for(int i = 0; i < curr -> numChildren; i++) {
            if((curr -> child[i]) -> nodeVal == str[level]) {
                curr = curr -> child[i];
                level += 1;
                placeFound = false;
                break;
            }
        }
    }
    //create a chain now starting from the curr node
    for(int i = level; i < len; i++) {
        curr = attachNode(curr, str[i]);
    }
}