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

📄 magicclient.cpp

📁 linux下简单对象应用协议的开发库
💻 CPP
字号:
#include "soapH.h"#include "magic.nsmap"////////////////////////////////////////////////////////////////////////////////////	Magic Squares Client//////////////////////////////////////////////////////////////////////////////////// To access a stand-alone server on a port: magicserver[] = "IP:PORT";// use "http://" to include HTTP header: magicserver[] = "http://IP:PORT";// const char magicserver[] = "linprog2.cs.fsu.edu:18081";// const char magicserver[] = "http://diablo.cs.fsu.edu:18081";// const char magicserver[] = "http://";const char magicserver[] = "http://www.cs.fsu.edu/~engelen/magicserver.cgi";int main(int argc, char **argv){ struct soap soap;  int r;  soap_init(&soap);  matrix *A = soap_new_matrix(&soap, -1);  if (argc <= 1)  { char *s = getenv("QUERY_STRING");    if (!s || (r = atoi(s)) == 0)      r = rand()%20;  }  else    r = atoi(argv[1]);  printf("Content-type: text/html\r\n\r\n<html><h1>Magic Square of Rank %d</h1><pre>\n", r);  if (soap_call_ns1__magic(&soap, magicserver, NULL, r, A))  { soap_print_fault(&soap, stderr);    soap_print_fault_location(&soap, stderr);  }  else  { for (int i = 0; i < (*A).__size; i++)    { for (int j = 0; j < (*A)[i].__size; j++)        printf("%4d", (*A)[i][j]);      printf("\n");    }  }  printf("</pre></html>\n");  soap_destroy(&soap);  soap_end(&soap);  return 0;}////////////////////////////////////////////////////////////////////////////////////	Class vector Methods//////////////////////////////////////////////////////////////////////////////////vector::vector(){ __ptr = 0;  __size = 0;}vector::vector(int size){ __ptr = (int*)soap_malloc(soap, size*sizeof(int));  __size = size;}vector::~vector(){ soap_unlink(soap, this); // not required, but just to make sure if someone calls delete on this}void vector::resize(int size){ int *p;  if (__size == size)    return;  p = (int*)soap_malloc(soap, size*sizeof(int));  if (__ptr)  { for (int i = 0; i < (size <= __size ? size : __size); i++)      p[i] = __ptr[i];    soap_unlink(soap, __ptr);    free(__ptr);  }  __ptr = p;  __size = size;}int& vector::operator[](int idx) const{ if (!__ptr || idx < 0 || idx >= __size)    fprintf(stderr, "Array index out of bounds\n");  return __ptr[idx];}////////////////////////////////////////////////////////////////////////////////////	Class matrix Methods//////////////////////////////////////////////////////////////////////////////////matrix::matrix(){ __ptr = 0;  __size = 0;}matrix::~matrix(){ soap_unlink(soap, this); // not required, but just to make sure if someone calls delete on this}matrix::matrix(int rows, int cols){   __ptr = soap_new_vector(soap, rows);  for (int i = 0; i < cols; i++)    __ptr[i].resize(cols);  __size = rows;}void matrix::resize(int rows, int cols){ int i;  vector *p;  if (__size != rows)  { if (__ptr)    { p = soap_new_vector(soap, rows);      for (i = 0; i < (rows <= __size ? rows : __size); i++)      { if (this[i].__size != cols)          (*this)[i].resize(cols);	(p+i)->__ptr = __ptr[i].__ptr;	(p+i)->__size = cols;      }      for (; i < rows; i++)        __ptr[i].resize(cols);    }    else    {       __ptr = soap_new_vector(soap, rows);      for (i = 0; i < rows; i++)        __ptr[i].resize(cols);      __size = rows;    }  }  else    for (i = 0; i < __size; i++)      __ptr[i].resize(cols);}vector& matrix::operator[](int idx) const{ if (!__ptr || idx < 0 || idx >= __size)    fprintf(stderr, "Array index out of bounds\n");  return __ptr[idx];}

⌨️ 快捷键说明

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