⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plus_minus_server.cc

📁 This Source-Navigator, an IDE for C/C++/Fortran/Java/Tcl/PHP/Python and a host of other languages.
💻 CC
字号:
// Sample Glish program - a "plus/minus" server to demonstrate Glish records//// This Glish client receives "compute" events that have a record value// with (at least) "x" and a "y" fields.  It generates an "answer" event// whose value is a record with "sum" and "difference" fields, representing// the sum and difference of the "x" and "y" fields.//// Compile this program using:////	C++ -I$ISTKPLACE/include -c plus_minus_server.cc//	C++ -o plus_minus_server plus_minus_server.o -L$ISTKPLACE/lib/$ARCH \//		-lglish -lsds -lm//// where "C++" is the local C++ compiler (e.g., "g++" or "CC").////// See the file "plus_minus_server.g" for a Glish program for testing this// client.  Invoking "glish plus_minus_server.g" will run that program.#include <string.h>#include "Glish/Client.h"void do_plus_minus( Client* client, Value* event_val );main( int argc, char** argv )	{	// Create a Glish client object.  We pass "argc" and "argv" to	// the client so it can figure out whether we were invoked from	// Glish.  Any Glish-related arguments will be stripped out upon	// return from the constructor.	Client c( argc, argv );	// Enter the standard Glish event loop.  Keep calling the client's	// NextEvent() method until it returns an nil GlishEvent pointer.	GlishEvent* e;	while ( (e = c.NextEvent()) )		{		// A GlishEvent object has two fields of interest: the event		// name and the event value.  First check the name to make		// sure it's an event that we respond to.		if ( ! strcmp( e->name, "compute" ) )			do_plus_minus( &c, e->value );		else			// Not an event that we respond to.			c.PostEvent( "error", "don't understand %s", e->name );		}	}void do_plus_minus( Client* c, Value* val )	{	int len_x, len_y;	const double* x = val->FieldDoublePtr( "x", len_x );	const double* y = val->FieldDoublePtr( "y", len_y );	if ( ! x || ! y )		{		c->PostEvent( "error",				"compute record lacks numeric x or y field" );		return;		}	int len = len_x < len_y ? len_x : len_y;	double* sum_ptr = new double[len];	double* diff_ptr = new double[len];	for ( int i = 0; i < len; ++i )		{		sum_ptr[i] = x[i] + y[i];		diff_ptr[i] = x[i] - y[i];		}	Value* result = create_record();	result->SetField( "sum", sum_ptr, len );	result->SetField( "difference", diff_ptr, len );	c->PostEvent( "answer", result );	// We're done with "result".	Unref( result );	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -