Esempio n. 1
0
File ReadEntireFile(std::string filename, B32 ignoreFailure) {
    File result = {};
    struct stat statBuffer;

    HANDLE fileDescriptor = open(filename.c_str(), O_RDONLY);
    if(fileDescriptor != -1) {
        result.size = GetFileSize(filename, fileDescriptor, True, ignoreFailure);
        if(result.size) {
            Cout("File opened: \"%s\"; Size: %lu", filename.c_str(), result.size);
            result.data = mmap(NULL, result.size, PROT_READ | PROT_WRITE, MAP_PRIVATE,
                               fileDescriptor, 0);
            if(result.data != MAP_FAILED) {
                U32 bytesRead = read(fileDescriptor, result.data, result.size);
                if(bytesRead != result.size) {
                    Cerr("File allocation failed: File: \"%s\"; Size %lu", filename.c_str(),
                         result.size);
                    munmap(result.data, result.size);
                    result.data = NULL;
                    result.size = 0;
                }
            } else {
                if(!ignoreFailure) {
                    Cerr("File request allocation failed: File \"%s\"; Size %lu",
                         filename.c_str(), result.size);
                }
            }
        } else {
            if(!ignoreFailure) {
                Cerr("File request failed with size of 0; File: \"%s\"", filename.c_str());
            }
        }
        close(fileDescriptor);
    }
    return result;
}
Esempio n. 2
0
B32 WriteEntireFile(std::string filename, U32 memorySize, void* memory, B32 ignoreFailure) {
    B32 result = false;

    HANDLE fileDescriptor = open(filename.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRWXU |
                                 S_IRWXG | S_IRWXO);
    if(fileDescriptor != -1) {
        U32 bytesWritten = write(fileDescriptor, memory, memorySize);
        result = bytesWritten == memorySize;
        close(fileDescriptor);
    } else {
        if(!ignoreFailure) {
            S32 err = errno;
            Cerr("Could not create file: \"%s\"", filename.c_str());
            Cerr("Errno: %d", err);
        }
    }

    return result;
}
Esempio n. 3
0
S64 GetLastWriteTime(std::string filename, B32 ignoreFailure) {
    S64 result = 0;
    struct stat statBuffer;
    if(!stat(filename.c_str(), &statBuffer)) {
        result = statBuffer.st_mtim.tv_sec;
    } else {
        if(!ignoreFailure) {
            Cerr("Could not get stat of file: %s", filename.c_str());
        }
    }
    return result;
}
Esempio n. 4
0
void PlayBackInput(HLState* state, Input* input){
	if(state->playbackHandle && state->playbackIndex){
		if(read(state->playbackHandle, input, sizeof(*input)) < 1){
			#if LOOP_AUTON_PLAYBACK
				S32 err = errno;
				U32 playbackIndex = state->playbackIndex;
				EndInputPlayback(state);
				BeginInputPlayback(state, playbackIndex);
				read(state->playbackHandle, input, sizeof(*input));
				if(err != 32){
					Cerr("Read Error: %d", err);
				}
			#endif
		}
	}
}
void GenerateMorphsOper::GenerateMorphsOperImpl::operator()() {
    auto tree = getTree();
    if (tree) {
        auto tree_pimpl = tree->pimpl;

        ConcurrentMolVector leaves;
        tree_pimpl->fetchLeaves(tree, true, leaves);
        
        tree_pimpl->candidates.clear();
        std::shared_ptr<CollectMorphs> collector(new CollectMorphs(
				tree_pimpl->candidates
				, tree
				, mSetTreeOwnershipForMorphs
				, tree_pimpl->target
				, (FingerprintSelector) tree_pimpl->fingerprint
				, (SimCoeffSelector) tree_pimpl->simCoeff
		));
		std::vector<std::shared_ptr<MorphCollector> > collectors;
		collectors.push_back(std::static_pointer_cast<MorphCollector>(collector));
		collectors.insert(collectors.end(), this->collectors.begin(), this->collectors.end());
        for (auto& leaf : leaves) {
            unsigned int morphAttempts = tree_pimpl->params.cntMorphs;
            if (leaf->getDistToTarget() < tree_pimpl->params.distToTargetDepthSwitch) {
                morphAttempts = tree_pimpl->params.cntMorphsInDepth;
            }

			// generate morphs for the current leaf
			try {
				Molpher molpher(
						leaf
						, tree_pimpl->chemOpers
						, tree_pimpl->threadCnt
						, morphAttempts
						, collectors
				);
				tree_pimpl->candidates.reserve(tree_pimpl->candidates.size() + morphAttempts);
				molpher();
			} catch (std::exception exp) {
				Cerr("Morphing failed for leaf: " + leaf->getSMILES());
				if (!leaf->getParentSMILES().empty()) {
					tree->deleteSubtree(leaf->getSMILES(), false);
				}
				continue;
			}

            MorphDerivationMap::accessor ac;
            if (tree_pimpl->morphDerivations.find(ac, leaf->getSMILES())) {
                ac->second += collector->WithdrawCollectAttemptCount();
            } else {
                tree_pimpl->morphDerivations.insert(ac, leaf->getSMILES());
                ac->second = collector->WithdrawCollectAttemptCount();
            }
        }
        tree_pimpl->candidates.shrink_to_fit();
        tree_pimpl->candidatesMask.clear();
        tree_pimpl->candidatesMask.resize(tree_pimpl->candidates.size(), true);
//        SynchCout("Generated " + parseNumber(tree_pimpl->candidates.size()) + " morphs.");
    } else {
        throw std::runtime_error("Cannot generate morphs. No tree associated with this instance.");
    }
}