std::string UniformGeneratorGLSLShaderBufferLoad::generateUniforms( const dp::fx::SmartParameterGroupSpec& spec )
      {
        // TODO who decides if SBL is available for the group?
        bool blockShaderBufferLoad = false;
        for ( ParameterGroupSpec::iterator it = spec->beginParameterSpecs(); !blockShaderBufferLoad && it != spec->endParameterSpecs(); ++it )
        {
          unsigned int parameterType = it->first.getType();
          blockShaderBufferLoad |= !!(parameterType & PT_SAMPLER_TYPE_MASK);
          blockShaderBufferLoad |= !!(parameterType & PT_BUFFER_PTR);
        }

        if ( blockShaderBufferLoad )
        {
          UniformGeneratorGLSLStandard generatorStandard;
          return generatorStandard.generateUniforms( spec );
        }
        else
        {
          std::string structName;
          std::string uniformName = "uniform_" + spec->getName();

          std::string stringRegion = "// ParameterGroup: " + spec->getName() + "\n";
          std::string stringStruct = generateStruct(spec, structName);
          std::string stringDefines = generateParameterAccessors( spec, uniformName, "", "->" );
          std::string stringUniform = "uniform " + structName + "* " + uniformName + ";\n";

          return stringRegion + stringStruct + stringUniform + stringDefines + stringRegion + "\n";
        }
      }
Esempio n. 2
0
void PYGenerator::generate()
{
	std::string fn = gOptions.output_ + gOptions.inputFS_ + ".py";
	CodeFile f(fn);
	f.output("from bintalk import protocol_writer");
	f.output("from bintalk import protocol_reader");
	for(std::set<std::string>::iterator iter = gContext.imported_.begin();
		iter != gContext.imported_.end(); ++iter)
	{
		std::string incFilename = *iter;
		incFilename = incFilename.substr(0,incFilename.find('.'));
		f.output("from %s import *", incFilename.c_str());
	}
	for(size_t i = 0; i < gContext.definitions_.size(); i++)
	{
		Definition* definition = gContext.definitions_[i];
		if(definition->file_ != gOptions.inputFN_)
			continue;
		if (definition->getEnum())
			generateEnum(f, definition->getEnum());
		else if (definition->getStruct())
			generateStruct(f, definition->getStruct());
		else if (definition->getService())
			generateService(f, definition->getService());
	}
}
Esempio n. 3
0
std::string InterfaceGenerator::generateStub(Interface & i, Info & info) {

	string tmp = TEMPLATE_STUB;
	replaceAll(tmp, "<stubname>", info.name);

	string stub_upper = info.name;
	std::transform(stub_upper.begin(), stub_upper.end(), stub_upper.begin(), ::toupper);
	replaceAll(tmp, "<STUBNAME>", stub_upper);

	{
		//generate procedures
		std::string s;
		for (Class::List::iterator c = i.classes.begin(); c != i.classes.end(); c++) {
			s.append(generateClass(*c));
		}

		replaceAll(tmp, "<classes>", s);
	}
	{
		std::cout << "structs" << std::endl;
			//generate structs
			std::string s;
			for (Struct::Indexes::iterator c = i.structsIndexes.begin(); c != i.structsIndexes.end(); c++) {
				std::cout << "struct " << i.structs.at(*c).name << std::endl;
				s.append(generateStruct(i, i.structs.at(*c)));
			}

			replaceAll(tmp, "<structs>", s);
		}
	return tmp;
}
Esempio n. 4
0
void SP_DPCodeRender :: generateHeader( SP_DPSyntaxTree * syntaxTree, FILE * writer )
{
	char filename[ 128 ] = { 0 };
	mNameRender->getFileName( syntaxTree->getName(), filename, sizeof( filename ) );

	fprintf( writer, "/* %s.hpp\n", filename );
	fprintf( writer, "   Generated by spxml2struct from %s\n\n", syntaxTree->getDefineFile() );
	fprintf( writer, "   !!! DO NOT EDIT !!!\n\n" );
	fprintf( writer, "*/\n" );
	fprintf( writer, "\n" );

	fprintf( writer, "#ifndef __%s_hpp__\n", filename );
	fprintf( writer, "#define __%s_hpp__\n", filename );
	fprintf( writer, "\n" );

	fprintf( writer, "#include \"spdatapickle/spdplib.hpp\"\n" );
	fprintf( writer, "\n" );

	fprintf( writer, "#ifdef __cplusplus\n" );
	fprintf( writer, "extern \"C\" {\n" );
	fprintf( writer, "#endif\n" );
	fprintf( writer, "\n" );

	generateMetaEnum( syntaxTree, writer );

	SP_DPSyntaxStructVector * slist = syntaxTree->getStructList();

	SP_DPSyntaxStructVector::iterator sit = slist->begin();

	for( ; slist->end() != sit; ++sit ) {
		generateStruct( &(*sit), writer );

		fprintf( writer, "\n" );
	}

	char name[ 128 ] = { 0 };
	mNameRender->getStructBaseName( syntaxTree->getName(), name, sizeof( name ) );

	fprintf( writer, "typedef struct tagSP_DPMetaInfo SP_DPMetaInfo_t;\n" );
	fprintf( writer, "extern SP_DPMetaInfo_t * g%sMetaInfo;\n", name );

	fprintf( writer, "\n" );

	generatePickleDefine( syntaxTree, writer );

	fprintf( writer, "\n" );
	fprintf( writer, "#ifdef __cplusplus\n" );
	fprintf( writer, "}\n" );
	fprintf( writer, "#endif\n" );

	fprintf( writer, "\n" );
	fprintf( writer, "#endif\n" );
	fprintf( writer, "\n" );
}
//================
//Function: int establishNewConn(int main_file_d)
//Description: Handshaking for new port connection.  Will recieve new connection port
// number from server, attempt to connection, and send back status to server.  Returns
// file descriptor of new connection.
//================
int establishNewConn(int main_file_d)
{
    ssize_t readit;
    char buffer[10];
    char connection_status[20];
    bzero(buffer,10);
    int newPort;
    int newSocket = 0;
    int notestablished=1;
    struct sockaddr_in server_address;
    
    while(notestablished)  //Loop through until valid connection is made 
    {
        
        readit = recv(main_file_d,&buffer,sizeof(buffer),0);
        if (readit <= 0)
        {
            errorMsgExit("Unable to read message.\n\n");
        }
        
        else
        {
            memset(connection_status,0,20);
            
            newPort = atoi(buffer);
//////         printf("Attempt to connect to port: %i\n",newPort);
            newSocket = createSocket();  //Generates a new socket
            bzero((char *) &server_address, sizeof(server_address));  //Clears out server_address struct
            server_address = generateStruct(newPort);  //Assigns struct variable to specified port
            
            
            if(connect(newSocket, (struct sockaddr *) &server_address, sizeof(server_address)) < 0)
            {
                strcpy(connection_status, "11Bad");  //Bad connection
                send(main_file_d,connection_status, sizeof(connection_status), 0);
            }
            
            else
            {
                strcpy(connection_status, "22Good");  //Good connection
//////          printf("New connection established on port: %i\n",newPort);
                send(main_file_d,connection_status, sizeof(connection_status), 0);
                notestablished=0;
                close(main_file_d);
            }
        }
    }
    
    return newSocket;
}
Esempio n. 6
0
void CSGenerator::generate()
{
	CodeFile f(gOptions.output_ + gOptions.inputFS_ + ".cs");
	f.output("using System.Collections.Generic;");
	for(size_t i = 0; i < gContext.definitions_.size(); i++)
	{
		Definition* definition = gContext.definitions_[i];
		if(definition->file_ != gOptions.inputFN_)
			continue;
		if (definition->getEnum())
			generateEnum(f, definition->getEnum());
		else if (definition->getStruct())
			generateStruct(f, definition->getStruct());
		else if (definition->getService())
			generateService(f, definition->getService());
	}
}
int main(int argc, char *argv[])
{

	int socket_file_d, port_main_running;
    struct sockaddr_in server_address;
    int new_socket;
    long ciphertext_size, key_file_size;

    //Screen for invalid number of arguments
    if (argc < 4) {
        fprintf(stderr,"Usage %s ciphertext key port\n",argv[0]);
        exit(1);
    }
    
    //LABEL FILES
    const char* ciphertext = argv[1];
    const char* key_file = argv[2];
    
    //ESTABLISH INITIAL CONNECTION
    port_main_running = atoi(argv[3]);  //Assign string to integer from user input
    socket_file_d = createSocket();  //Generates a new socket
    
    bzero((char *) &server_address, sizeof(server_address));  //Clears out server_address struct
    server_address = generateStruct(port_main_running);  //Assigns struct variable to specified port
    
    if(connect(socket_file_d, (struct sockaddr *) &server_address, sizeof(server_address)) < 0)
    {
       fprintf(stderr,"Failed to connect to port: %i\n",port_main_running);
        exit(2);
    }

    checkCorrectServer(socket_file_d);
    

//////   printf("Connected to main server port: %i\n",port_main_running);
    
    //ESTABLISH NEW CONNECTION
    new_socket = establishNewConn(socket_file_d);
    
    //WRITE Cipher text FILE
    ciphertext_size = writeFile(new_socket,ciphertext);
//////    printf("Ciphertext file size: %li\n",ciphertext_size);
    //WRITE KEY FILE
    key_file_size = writeFile(new_socket,key_file);
//////    printf("Key file size: %li\n",key_file_size);
    
    if(key_file_size < ciphertext_size)
    {
    	sendFileSizeStatus(1,new_socket);
        close(new_socket);
        errorMsgExit("Client exit: Key file size must be as large as plaintext.\n");
    }
    
    sendFileSizeStatus(0,new_socket);


    readAndOutputDec(new_socket);


    return 0;

}
Esempio n. 8
0
void GoGenerator::generateProgram()
{
	generateEnum();
	generateStruct();
	generateService();
}