Exemplo n.º 1
0
bool MemoryCache::evict(MemoryCacheEntry* entry)
{
    ASSERT(WTF::isMainThread());

    Resource* resource = entry->m_resource.get();
    bool canDelete = resource->canDelete();
    WTF_LOG(ResourceLoading, "Evicting resource %p for '%s' from cache", resource, resource->url().string().latin1().data());
    // The resource may have already been removed by someone other than our caller,
    // who needed a fresh copy for a reload. See <http://bugs.webkit.org/show_bug.cgi?id=12479#c6>.
    update(resource, resource->size(), 0, false);
    removeFromLiveDecodedResourcesList(entry);

    ResourceMap* resources = m_resourceMaps.get(resource->cacheIdentifier());
    ASSERT(resources);
    ResourceMap::iterator it = resources->find(resource->url());
    ASSERT(it != resources->end());
#if ENABLE(OILPAN)
    MemoryCacheEntry* entryPtr = it->value;
#else
    OwnPtr<MemoryCacheEntry> entryPtr;
    entryPtr.swap(it->value);
#endif
    resources->remove(it);
#if ENABLE(OILPAN)
    if (entryPtr)
        entryPtr->dispose();
#endif
    return canDelete;
}
Exemplo n.º 2
0
Arquivo: game.cpp Projeto: Fxe/ilios
void ilios::kittens::Game::build(string id)
{
  //get price
  ResourceMap price = this->bld->getPrice(id);
  //check resources
  ResourceMap deficit = this->res->getDeficitResources(price);
  if (deficit.empty())
  {
    cout << "built " << id << " cost:" << endl;
    /*
    
    for (auto e : price)
    {
      cout << e.first << ": " << e.second << endl;
    }
    */
    //remove and build
    this->res->removeResources(price);
    this->bld->build(id);
    //action taken update effect
    this->updateResources();
  }
  else
  {
    //warn
    /*
    cout << "missing resources" << endl;
    for (auto e : deficit)
    {
      cout << e.first << ": " << e.second << endl;
    }
    */
  }
}
Exemplo n.º 3
0
void MemoryCache::replace(Resource* newResource, Resource* oldResource)
{
    ASSERT(newResource->cacheIdentifier() == oldResource->cacheIdentifier());
    ResourceMap* resources = ensureResourceMap(oldResource->cacheIdentifier());
    if (MemoryCacheEntry* oldEntry = resources->get(oldResource->url()))
        evict(oldEntry);
    add(newResource);
    if (newResource->decodedSize() && newResource->hasClients())
        insertInLiveDecodedResourcesList(resources->get(newResource->url()));
}
ResourceSpawn* ResourceManagerImplementation::getResourceSpawn(const String& spawnName) {
	ResourceSpawn* spawn = NULL;

	ReadLocker locker(_this.getReferenceUnsafeStaticCast());

	ResourceMap* resourceMap = resourceSpawner->getResourceMap();

	spawn = resourceMap->get(spawnName.toLowerCase());

	return spawn;
}
Exemplo n.º 5
0
extern "C" int digitalRead(uint8_t pin)
{
	ResourceMap *rmap = ResourceMap::getInstance();
	Pin *p = rmap->getPin(pin);
	if (!p) return -1;

	

	if (p->getValue()) return HIGH;
	return LOW;
}
Exemplo n.º 6
0
extern "C"  void digitalWrite(uint8_t pin, uint8_t val)
{
	ResourceMap *rmap = ResourceMap::getInstance();
	Pin *p = rmap->getPin(pin);

	if (!p) return;

	p->setValue(val);

	
}
Exemplo n.º 7
0
extern "C" void pinMode(uint8_t pin, uint8_t mode)
{
	
	ResourceMap *rmap = ResourceMap::getInstance();
	Pin *p = rmap->getPin(pin);

	if (!p) return;

	p->setTris(mode);
	
}
Exemplo n.º 8
0
void MemoryCache::add(Resource* resource)
{
    ASSERT(WTF::isMainThread());
    ASSERT(resource->url().isValid());
    ResourceMap* resources = ensureResourceMap(resource->cacheIdentifier());
    RELEASE_ASSERT(!resources->contains(resource->url()));
    resources->set(resource->url(), MemoryCacheEntry::create(resource));
    update(resource, 0, resource->size(), true);

    WTF_LOG(ResourceLoading, "MemoryCache::add Added '%s', resource %p\n", resource->url().string().latin1().data(), resource);
}
Exemplo n.º 9
0
MemoryCacheEntry* MemoryCache::getEntryForResource(const Resource* resource) const
{
    if (resource->url().isNull() || resource->url().isEmpty())
        return nullptr;
    ResourceMap* resources = m_resourceMaps.get(resource->cacheIdentifier());
    if (!resources)
        return nullptr;
    MemoryCacheEntry* entry = resources->get(resource->url());
    if (!entry || entry->m_resource != resource)
        return nullptr;
    return entry;
}
Exemplo n.º 10
0
void MemoryCache::evictResources()
{
    while (true) {
        ResourceMapIndex::iterator resourceMapIter = m_resourceMaps.begin();
        if (resourceMapIter == m_resourceMaps.end())
            break;
        ResourceMap* resources = resourceMapIter->value.get();
        while (true) {
            ResourceMap::iterator resourceIter = resources->begin();
            if (resourceIter == resources->end())
                break;
            evict(resourceIter->value.get());
        }
        m_resourceMaps.remove(resourceMapIter);
    }
}
Exemplo n.º 11
0
Resource* MemoryCache::resourceForURL(const KURL& resourceURL, const String& cacheIdentifier)
{
    ASSERT(WTF::isMainThread());
    ResourceMap* resources = m_resourceMaps.get(cacheIdentifier);
    if (!resources)
        return nullptr;
    KURL url = removeFragmentIdentifierIfNeeded(resourceURL);
    MemoryCacheEntry* entry = resources->get(url);
    if (!entry)
        return nullptr;
    Resource* resource = entry->m_resource.get();
    if (resource && !resource->lock()) {
        ASSERT(!resource->hasClients());
        bool didEvict = evict(entry);
        ASSERT_UNUSED(didEvict, didEvict);
        return nullptr;
    }
    return resource;
}
Exemplo n.º 12
0
void ResourceManagerImplementation::getResourceListByType(Vector<ManagedReference<ResourceSpawn*> >& list, int type, const String& zoneName) {
	list.removeAll();

	ReadLocker locker(_this.getReferenceUnsafeStaticCast());

	ManagedReference<ResourceSpawn*> resourceSpawn;

	try {
		ResourceMap* resourceMap = resourceSpawner->getResourceMap();

		ZoneResourceMap* zoneMap = resourceMap->getZoneResourceList(zoneName);

		if (zoneMap != NULL) {
			for (int i = 0; i < zoneMap->size(); ++i) {
				resourceSpawn = zoneMap->get(i);

				if (!resourceSpawn->inShift())
					continue;

				if (type == 9){
					if (resourceSpawn->isType("radioactive"))
						list.add(resourceSpawn);
				}

				else if (resourceSpawn->getSurveyToolType() == type) {
					list.add(resourceSpawn);
				}
			}

		}

	} catch (Exception& e) {
		error(e.getMessage());
		e.printStackTrace();
	}
}
Exemplo n.º 13
0
    void init(unsigned w, unsigned h) {

        ResourceMap resource;
        resource.addPath("Fonts","");
        std::string fontPath = resource.getPath("Fonts")+"monaco11";
        font.load(fontPath.c_str());

        console.reserve(height/font.lineHeight());

        width=w;height=h;

        objs.clear();

        glMatrixMode (GL_PROJECTION);
        glLoadIdentity ();
        glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 2000.0);
        
        glEnable(GL_DEPTH_TEST);
        glutIdleFunc (idle);
        glutDisplayFunc (draw);
        glutKeyboardFunc (keyboard);
               

        //adding here the mouse processing callbacks
        glutMotionFunc(processMouseActiveMotion);
        glutPassiveMotionFunc(processMousePassiveMotion);
        
        GLfloat mat_specular[] = { .5, .5, .5, 1.0 };
        GLfloat mat_shininess[] = { 5.0 };
        GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
        glClearColor (0.0, 0.0, 0.0, 0.0);
        glShadeModel (GL_SMOOTH);

        glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
        glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
        
        Color3 colors [] = {
            Color3(255,0,0),
            Color3(0,255,0),
            Color3(0,0,255),
            Color3(255,255,0),
            Color3(0,255,255),
            Color3(255,0,255),
            Color3(255,255,255),
        };
        
        int n = 1;
        

        for (unsigned i=0;i<n;i++) {
             size_t size;
//            size = objs.size();
//            objs.push_back(Object());
//            objs[size].p_ = DReal3(randnorm<dreal>(),randnorm<dreal>(),randnorm<dreal>());
//            initModel(objs[objs.size()-1], icosa_vertex, icosa_indices,icosa_vertex_size,icosa_indices_size, colors[(i+5)%7],(7./n));
            size = objs.size();
            objs.push_back(Object());
//            objs[size].p_ =0.8*DReal3(0.1+randnorm<dreal>(),0.1+randnorm<dreal>(),randnorm<dreal>());
            //objs[size].p_ =0.5*DReal3(randnorm<dreal>(),randnorm<dreal>(),randnorm<dreal>());
            objs[size].p_=Real3(0.5,0.,0.5)+0.1*Real3(randnorm<real>(),randnorm<real>(),randnorm<real>());
            initModel(objs[objs.size()-1], bunny_vertex, bunny_indices,bunny_vertex_size,bunny_indices_size, colors[(i)%7],5/*(1./n)*/);            
//            initModel(objs[objs.size()-1], bunnyh_vertex, bunnyh_indices,bunnyh_vertex_size,bunnyh_indices_size, colors[(i)%7],5/*(1./n)*/);
        }

        gettimeofday(&idleold, 0);        
        transformCoords();

        buildTree(objs,coltrees);
        colres.resize(coltrees.size());
        for (unsigned i=0;i<coltrees.size();i++) {
            coltrees[i]->collideWithSegment(seg[0], seg[1], colres[i]);
        }
    }
Exemplo n.º 14
0
 void TextEditEx::merge_resources(const ResourceMap& _resources)
 {
     for (auto iter = _resources.cbegin(); iter != _resources.cend(); iter++)
         resource_index_[iter->first] = iter->second;
 }
Exemplo n.º 15
0
bool CResourceFileSystem::Open( LPCTSTR lpszPackFolder )
{
    tstring folderPath = lpszPackFolder;
    tstring::iterator lastChar = folderPath.end();
    --lastChar;
    if ( *lastChar != TEXT('/') && *lastChar != TEXT('\\') )
    {
        folderPath += TEXT("\\");
    }

    tstring condition = folderPath + TEXT("*.pack");

    WIN32_FIND_DATA ffd;
    HANDLE hFind;

    typedef map<tstring, shared_ptr<IResource> > ResourceMap;
    ResourceMap resourceMap;

    hFind = ::FindFirstFile(condition.c_str(), &ffd);
    if (hFind != INVALID_HANDLE_VALUE)
    {
        do
        {
            // 非文件夹
            if ( (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
            {
                tstring fullPath = folderPath + ffd.cFileName;
                CPackResourceSet resourceSet;
                if (resourceSet.Open(fullPath.c_str()))
                {
                    for (vector<shared_ptr<IResource>>::iterator iter = resourceSet.m_Resources.begin(); iter != resourceSet.m_Resources.end(); ++iter)
                    {
                        // 和本地比较版本,保留高版本的
                        ResourceMap::iterator iter2 = resourceMap.find((*iter)->GetName());

                        if (iter2 != resourceMap.end())
                        {
                            shared_ptr<IResource> spResourceOld = iter2->second;
                            if (spResourceOld->GetVersion() >= (*iter)->GetVersion())
                            {
                                continue;
                            }
                        }

                        resourceMap[(*iter)->GetName()] = (*iter);
                    }
                }
            }
        }
        while (::FindNextFile(hFind, &ffd) != 0);
        ::FindClose(hFind);
    }

    if (resourceMap.size() > 0)
    {
        m_Resources.clear();
        for (ResourceMap::iterator iter = resourceMap.begin(); iter != resourceMap.end(); ++iter)
        {
            m_Resources.push_back( iter->second );
        }

        sort(m_Resources.begin(), m_Resources.end(), ResourceGreater());

        return true;
    }
    else
    {
        return false;
    }
}