Beispiel #1
0
void NetFEM_elems::pup(PUP::er &p) {
	int version=1; p(version);		
	name.pup(p);
	super::pup(p);
	p(nodesPer); 
	if (p.isUnpacking()) { //Unpack data into heap
		allocate();
		bytesPer=nodesPer*sizeof(int);
	}
	else //Make canonical copy of data
		localCopy();
	p(conn,getItems()*nodesPer);
}
void ObjectTextContext::updateForward(int uchar, const String::AbstractIterator &it)
{
	bool checkNextChar = false;
	if (flags & WITHIN_STRING) {
		if (uchar == '"') {
			String::AbstractIterator &it2 = localCopy(it);
			if (it2.getBackward() != '\\') {
				flags &= ~WITHIN_STRING;
				LOG(APP, DEBUG, "Exit string\n");
			}
		}
	}
	else {
		if ((uchar == CHAR_OPENAQUOTE || uchar == '{') && (flags & (WITHIN_ALGEBRAIC | WITHIN_VECTMATRIX)) == 0) {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			checkNextChar = true;
			countProgList++;
			if (countProgList == 1)
				LOG(APP, DEBUG, "Enter list/prog\n");
		}
		else if ((uchar == CHAR_CLOSEAQUOTE || uchar == '}') && (flags & (WITHIN_ALGEBRAIC | WITHIN_VECTMATRIX)) == 0) {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			checkNextChar = true;
			countProgList--;
			if (countProgList == 0)
				LOG(APP, DEBUG, "Exit list/prog\n");
		}
		else if (uchar == '[') {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			checkNextChar = true;
			countDim++;
			if (countDim == 1) {
				flags |= WITHIN_VECTMATRIX;
				LOG(APP, DEBUG, "Enter vector/matrix\n");
			}
		}
		else if (uchar == ']') {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			checkNextChar = true;
			countDim--;
			if (countDim == 0) {
				flags &= ~WITHIN_VECTMATRIX;
				LOG(APP, DEBUG, "Exit vector/matrix\n");
			}
		}
		else if ((uchar == '\'') && (flags & WITHIN_VECTMATRIX) == 0) {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			checkNextChar = true;
			if (flags & WITHIN_ALGEBRAIC) {
				flags &= ~WITHIN_ALGEBRAIC;
				LOG(APP, DEBUG, "Exit algebraic\n");
			}
			else {
				flags |= WITHIN_ALGEBRAIC;
				LOG(APP, DEBUG, "Enter algebraic\n");
			}
		}
		else if (uchar == '"' && (flags & (WITHIN_ALGEBRAIC | WITHIN_VECTMATRIX)) == 0) {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			flags |= WITHIN_STRING;
			LOG(APP, DEBUG, "Enter string\n");
		}
		else if (isSeparator(uchar) || isOperator(uchar)) {
			flags &= ~(WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER);
			checkNextChar = true;
			LOG(APP, DEBUG, "Exit real/int/id\n");
		}
		else if ((flags & (WITHIN_REAL | WITHIN_INTEGER | WITHIN_IDENTIFIER)) == 0) {
			if (uchar == '#') {
				flags |= WITHIN_INTEGER;
				itemStartPos = it.getPosition();
				LOG(APP, DEBUG, "Enter integer\n");
			}
			else if (uchar >= '0' && uchar <= '9') {
				flags |= WITHIN_REAL;
				itemStartPos = it.getPosition() - 1;
				LOG(APP, DEBUG, "Enter real\n");
			}
			else if (!isSeparator(uchar)) {
				flags |= WITHIN_IDENTIFIER;
				itemStartPos = it.getPosition() - 1;
				LOG(APP, DEBUG, "Enter identifier\n");
			}
		}
	}
	if (checkNextChar) {
		String::AbstractIterator &it2 = localCopy(it);
		int uc = it2.getForward();
		if (uc >= '0' && uc <= '9') {
			flags |= WITHIN_REAL;
			itemStartPos = it.getPosition();
			LOG(APP, DEBUG, "Enter real\n");
		}
		else if (uc != -1 && !isSeparator(uc) && !isOperator(uc) && uc != '#') {
			flags |= WITHIN_IDENTIFIER;
			itemStartPos = it.getPosition();
			LOG(APP, DEBUG, "Enter identifier\n");
		}
	}
}
Beispiel #3
0
void* wxOdbcResultSet::GetResultBlob(int nField, wxMemoryBuffer& Buffer)
{
    if (m_BlobMap.find(nField) == m_BlobMap.end())
    {
      if (m_pOdbcStatement == NULL)
          m_pOdbcStatement = m_pStatement->GetLastStatement();

      if (m_NullValues.find(nField) != m_NullValues.end())
        return NULL;

      SQLINTEGER iLength = 8192;
      SQLINTEGER iSize = 0;
      unsigned char buff[8193];

      memset(buff, 0, 8193*sizeof(unsigned char));

      long nReturn = m_pInterface->GetSQLBindParameter()(m_pOdbcStatement, nField, SQL_PARAM_OUTPUT,
                      SQL_C_BINARY, SQL_BINARY, iLength, 0, &buff, iLength, &iSize);

      // Mark this field as retrieved
      m_RetrievedValues.insert(nField);
      // Record whether this field is NULL
      if (iSize == SQL_NULL_DATA)
      {
        m_NullValues.insert(nField);
        return NULL;
      }

      nReturn = m_pInterface->GetSQLGetData()( m_pOdbcStatement, nField, SQL_C_BINARY, &buff, iLength, &iSize );
      if ( nReturn != SQL_SUCCESS && nReturn != SQL_SUCCESS_WITH_INFO )
      {
          wxLogError(_T("Error with RunQueryWithResults - 1\n"));
          InterpretErrorCodes(nReturn, m_pOdbcStatement);
          ThrowDatabaseException();
      }

      // NULL data
      if (iSize < 0)
      {
        wxMemoryBuffer tempBuffer(0);
        tempBuffer.SetDataLen(0);
        tempBuffer.SetBufSize(0);
        Buffer = tempBuffer;

        // Add null blobs to the map as well
        m_BlobMap[nField] = tempBuffer;
        return NULL;
      }

      size_t dataLength = (iLength < iSize) ? iLength : iSize;
      size_t bufferSize = dataLength;
      wxMemoryBuffer tempBuffer(dataLength);

      tempBuffer.AppendData( buff, dataLength );

      while ( iSize > iLength )
      {
          nReturn = m_pInterface->GetSQLGetData()( m_pOdbcStatement, nField, SQL_C_BINARY, &buff, iLength, &iSize );
          if ( nReturn != SQL_SUCCESS && nReturn != SQL_SUCCESS_WITH_INFO )
          {
              wxLogError(_T("Error with RunQueryWithResults - 2\n"));
              InterpretErrorCodes(nReturn, m_pOdbcStatement);
              ThrowDatabaseException();
          }

          dataLength = (iLength < iSize) ? iLength : iSize;
          tempBuffer.AppendData( buff, dataLength );
          bufferSize += dataLength;
      }

      wxMemoryBuffer tempBufferExactSize(bufferSize);
      void* pData = tempBufferExactSize.GetWriteBuf(bufferSize);
      memcpy(pData, tempBuffer.GetData(), bufferSize);
      tempBufferExactSize.UngetWriteBuf(bufferSize);
      tempBufferExactSize.SetDataLen(bufferSize);
      tempBufferExactSize.SetBufSize(bufferSize);
      Buffer = tempBufferExactSize;
 
      wxMemoryBuffer localCopy(Buffer);
      m_BlobMap[nField] = localCopy;

      return Buffer.GetData();
    }
    else
    {
      BlobMap::iterator it = m_BlobMap.find(nField);
      if (it == m_BlobMap.end())
      {
        wxMemoryBuffer tempBuffer(0);
        tempBuffer.SetDataLen(0);
        tempBuffer.SetBufSize(0);
        Buffer = tempBuffer;
        return NULL;
      }
      else
      {
        Buffer = it->second;
        return Buffer.GetData();
      }
    }
}
Beispiel #4
0
void NetFEM_elems::copy(void) {
	super::copy();
	localCopy();
}
Beispiel #5
0
SquareMatrix SqMRO_Exponential::operator()(double time) const {

	SquareMatrix localCopy(getRows()), squaredCopy(getRows());
	SquareMatrix I(getRows()), Q(getRows()), P(getRows()), result(getRows());
	unsigned int nCoefs = 6;
	RowVector padeCoef(nCoefs + 1);
	unsigned int i, odd;
	double k, scaleFactor;

	// Multiply intime factor
	//localCopy = (*this) * time;
	localCopy.multiply(time);

	// Setup Pade coefficients
	padeCoef.element(0) = 1;
	for (i = 1; i <= nCoefs; i++) {
		k = i;
		padeCoef.element(i) = padeCoef.element(i-1) * ((nCoefs+1-k)/(k*(2*nCoefs+1-k)));
	}

	// Scale the matrix if necessary
	scaleFactor = m_thisMatrix->infinityNorm();
	if (scaleFactor > 0.5) {

		scaleFactor = log(scaleFactor)/log((double)2);
		scaleFactor = (scaleFactor > 0) ? floor(scaleFactor) : ceil(scaleFactor);
		scaleFactor += 2;
		scaleFactor = (scaleFactor > 0) ? scaleFactor : 0;

		localCopy = pow((double)2,-scaleFactor) * localCopy;
	}

	// Horner evaluation of the irreducible fraction
	I.identity();
	squaredCopy = localCopy * localCopy;
	Q = padeCoef.element(nCoefs) * I;
	P = padeCoef.element(nCoefs-1) * I;
	odd = 1;

	for (i = (nCoefs - 1); i > 0; i--) {

		if (odd == 1) {
			Q = Q*squaredCopy + padeCoef.element(i-1)*I;
		} else {
			P = P*squaredCopy + padeCoef.element(i-1)*I;
		}

		odd = 1 - odd;
	}

	if (odd == 1) {
		Q = Q*localCopy;
		Q = Q - P;
		result = -1*(I + 2 * (Q.inverse() * P));
	} else {
		P = P*localCopy;
		Q = Q - P;
		result = I + 2 * (Q.inverse() * P);
	}

	// Squaring
	for (i = 0; i < (unsigned int)scaleFactor; i++) {

		result = result * result;
	}

	return result;
}
Beispiel #6
0
std::string trim(const std::string& InputString) {
	std::string localCopy(InputString);

	return trim(localCopy);
}