//Case helper functions... void cvtChooseListToPairs(HqlExprArray & target, IHqlExpression * from, unsigned base) { unsigned max = from->numChildren(); unsigned idx; target.ensure(max); for (idx = 0; idx < max; idx++) { IHqlExpression * v1 = createConstant(createIntValue(idx+base, LINK(unsignedType))); IHqlExpression * v2 = from->queryChild(idx); ITypeInfo * type = v2->queryType(); target.append(* createValue(no_mapto, LINK(type), v1, LINK(v2))); } }
ForEachChild(i, record) { IHqlExpression * cur = record->queryChild(i); switch (cur->getOperator()) { case no_record: expandFieldNames(errorProcessor, out, cur, prefix, sep, formatFunc); break; case no_ifblock: expandFieldNames(errorProcessor, out, cur->queryChild(1), prefix, sep, formatFunc); break; case no_field: { StringBuffer lowerName; lowerName.append(cur->queryName()).toLowerCase(); if (formatFunc) { HqlExprArray args; args.append(*createConstant(lowerName.str())); OwnedHqlExpr bound = createBoundFunction(NULL, formatFunc, args, NULL, true); OwnedHqlExpr folded = foldHqlExpression(errorProcessor, bound, NULL, HFOthrowerror|HFOfoldimpure|HFOforcefold); assertex(folded->queryValue()); lowerName.clear(); getStringValue(lowerName, folded); } switch (cur->queryType()->getTypeCode()) { case type_record: case type_row: { unsigned len = prefix.length(); prefix.append(lowerName).append("."); expandFieldNames(errorProcessor, out, cur->queryRecord(), prefix, sep, formatFunc); prefix.setLength(len); break; } default: { if (out.length()) out.append(sep); out.append(prefix).append(lowerName); break; } } break; } } }
IHqlExpression * buildDiskFileViewerEcl(const char * logicalName, IHqlExpression * record) { //Add filepos to the incomming record structure... IHqlExpression * filePosAttr = createAttribute(virtualAtom, createAttribute(filepositionAtom)); OwnedHqlExpr filepos = createField(fileposName, makeIntType(8, false), NULL, filePosAttr); IHqlExpression * sizeofAttr = createAttribute(virtualAtom, createAttribute(sizeofAtom)); OwnedHqlExpr reclen = createField(recordlenName, makeIntType(2, false), NULL, sizeofAttr); HqlExprArray fields; unwindChildren(fields, record); fields.append(*filepos.getLink()); fields.append(*reclen.getLink()); OwnedHqlExpr newRecord = createRecord(fields); newRecord.setown(createSymbol(createIdentifierAtom("_SourceRecord_"), newRecord.getLink(), ob_private)); OwnedHqlExpr dataset = createNewDataset(createConstant(logicalName), newRecord.getLink(), createValue(no_thor), NULL, NULL, NULL); OwnedHqlExpr filtered = addFilter(dataset, filepos); OwnedHqlExpr projected = addSimplifyProject(filtered); OwnedHqlExpr output = addOutput(projected); return output.getClear(); }
void ViewFieldECLTransformer::transform(unsigned & lenTarget, char * & target, unsigned lenSource, const char * source, const HqlExprArray & extraArgs) { Owned<ITypeInfo> sourceType = makeUtf8Type(lenSource, 0); IValue * sourceValue = createUtf8Value(source, LINK(sourceType)); OwnedHqlExpr sourceExpr = createConstant(sourceValue); HqlExprArray actuals; actuals.append(*LINK(sourceExpr)); appendArray(actuals, extraArgs); Owned<IErrorReceiver> errorReporter = createThrowingErrorReceiver(); OwnedHqlExpr call = createBoundFunction(errorReporter, function, actuals, NULL, true); OwnedHqlExpr castValue = ensureExprType(call, utf8Type); OwnedHqlExpr folded = quickFoldExpression(castValue, NULL, 0); IValue * foldedValue = folded->queryValue(); assertex(foldedValue); unsigned len = foldedValue->queryType()->getStringLen(); const char * data = static_cast<const char *>(foldedValue->queryValue()); unsigned size = rtlUtf8Size(len, data); lenTarget = len; target = (char *)rtlMalloc(size); memcpy(target, data, size); }
IHqlExpression * buildDiskOutputEcl(const char * logicalName, IHqlExpression * record) { OwnedHqlExpr dataset = createNewDataset(createConstant(logicalName), LINK(record), createValue(no_thor), NULL, NULL, NULL); return addOutput(dataset); }
bool DX9VertexShaderConstantsCompiler::compile( const std::string& shaderCode, const char* entryFunction, std::vector< ShaderConstantDesc >& outConstants ) { // create a renderer IDirect3D9* d3d9 = Direct3DCreate9( D3D_SDK_VERSION ); DX9Initializer initializer( *d3d9 ); IDirect3DDevice9* compileDevice = initializer.createNullDevice(); const char* shaderProfile = D3DXGetVertexShaderProfile( compileDevice ); DWORD flags = D3DXSHADER_DEBUG; ID3DXBuffer* shaderBuf = NULL; ID3DXBuffer* errorsBuf = NULL; ID3DXConstantTable* shaderConstants = NULL; DX9ShaderIncludeLoader includesLoader; HRESULT res = D3DXCompileShader( shaderCode.c_str(), shaderCode.length(), NULL, &includesLoader, entryFunction, shaderProfile, flags, &shaderBuf, &errorsBuf, &shaderConstants ); // interpret the results bool result = true; if ( FAILED(res) || shaderBuf == NULL ) { if ( errorsBuf != NULL ) { std::string compilationErrors = ( const char* )errorsBuf->GetBufferPointer(); errorsBuf->Release(); m_errorMsg = std::string( "Shader compilation error: " ) + compilationErrors; } else { m_errorMsg = translateDxError( "Error while compiling a shader", res ); } result = false; } else { std::vector< D3DXCONSTANT_DESC > constants; ShaderConstantDesc newConstant; result = ShaderCompilerUtils::parseConstants( shaderConstants, m_errorMsg, constants ); if ( result ) { unsigned int constantsCount = constants.size(); for ( unsigned int i = 0; i < constantsCount; ++i ) { if ( createConstant( constants[i], newConstant ) ) { outConstants.push_back( newConstant ); } } } } // cleanup if ( shaderConstants ) { shaderConstants->Release(); } compileDevice->Release(); d3d9->Release(); return result; }
void *new_createConstant(double cons) { void *ans = createConstant(cons); return ans; }
IHqlExpression * createNotFoundValue() { OwnedITypeInfo int4 = makeIntType(4, true); return createConstant(int4->castFrom(true, -1)); }
static const Evaluation passThroughOrCreateConstant(Scalar value) { return createConstant(value); }