src/GuileHandler.h
branchv_0
changeset 9 65f9d6b94f5c
parent 8 1e6206284c6c
child 10 f7f9a2553128
equal deleted inserted replaced
8:1e6206284c6c 9:65f9d6b94f5c
    74 
    74 
    75 	SCM toGuileSymbol(const string_t& name) {
    75 	SCM toGuileSymbol(const string_t& name) {
    76 		return scm_string_to_symbol(scm_from_locale_string(convertor.to_bytes(name).c_str()));
    76 		return scm_string_to_symbol(scm_from_locale_string(convertor.to_bytes(name).c_str()));
    77 	}
    77 	}
    78 
    78 
    79 	SCM evalGuileCode(const string_t& value) {
    79 	/**
    80 		return scm_eval_string(toGuileValue(&value, typeid (string_t), TypeId::STRING));
    80 	 * @param code guile source code e.g. (+ 1 2 3) or #t
       
    81 	 * @param defaultReturnValue is returned if code is empty
       
    82 	 * @return result of code execution or defaultReturnValue
       
    83 	 */
       
    84 	SCM evalGuileCode(const string_t& code, SCM defaultReturnValue = SCM_BOOL_F) {
       
    85 		if (code.size()) return scm_eval_string(toGuileValue(&code, typeid (string_t), TypeId::STRING));
       
    86 		else return defaultReturnValue;
    81 	}
    87 	}
    82 
    88 
    83 	SCM toGuileValue(const void* value, const std::type_info& typeInfo, TypeId type) {
    89 	SCM toGuileValue(const void* value, const std::type_info& typeInfo, TypeId type) {
    84 		switch (type) {
    90 		switch (type) {
    85 			case TypeId::BOOLEAN:
    91 			case TypeId::BOOLEAN:
   174 
   180 
   175 			currentAttributeIndex++;
   181 			currentAttributeIndex++;
   176 
   182 
   177 			// TODO: > 0 ?:
   183 			// TODO: > 0 ?:
   178 			if (currentAttributeIndex > 0 && currentAttributeIndex % currentReaderMetadata.size() == 0) {
   184 			if (currentAttributeIndex > 0 && currentAttributeIndex % currentReaderMetadata.size() == 0) {
   179 				includeCurrentRecord = scm_to_bool(evalGuileCode(currentRelationConfiguration->guileWhere));
   185 				evalGuileCode(currentRelationConfiguration->guileForEach);
       
   186 				includeCurrentRecord = scm_to_bool(evalGuileCode(currentRelationConfiguration->guileWhere, SCM_BOOL_T));
   180 				if (includeCurrentRecord) for (auto attribute : currentWriterMetadata) writeGuileValueToAttribute(attribute);
   187 				if (includeCurrentRecord) for (auto attribute : currentWriterMetadata) writeGuileValueToAttribute(attribute);
   181 				includeCurrentRecord = false;
   188 				includeCurrentRecord = false;
   182 			}
   189 			}
   183 
   190 
   184 			currentAttributeIndex = currentAttributeIndex % currentReaderMetadata.size();
   191 			currentAttributeIndex = currentAttributeIndex % currentReaderMetadata.size();