/*-------------------------------------------------------------------------
FastpathArg.cs
This class is a port of the class FastpathArg.java implemented by
PostgreSQL Global Development Group
Copyright (c) 2004, Emiliano Necciari
Original Code: Copyright (c) 2003, PostgreSQL Global Development Group
Note: (Francisco Figueiredo Jr.)
Changed case of method names to conform to .Net names standard.
Also changed type names to their true names. i.e. int -> Int32
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose, without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph and the following two paragraphs appear in all copies.
//
// IN NO EVENT SHALL THE NPGSQL DEVELOPMENT TEAM BE LIABLE TO ANY PARTY
// FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
// INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
// DOCUMENTATION, EVEN IF THE NPGSQL DEVELOPMENT TEAM HAS BEEN ADVISED OF
// THE POSSIBILITY OF SUCH DAMAGE.
//
// THE NPGSQL DEVELOPMENT TEAM SPECIFICALLY DISCLAIMS ANY WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
// ON AN "AS IS" BASIS, AND THE NPGSQL DEVELOPMENT TEAM HAS NO OBLIGATIONS
// TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
-------------------------------------------------------------------------
*/
using System;
using System.IO;
using Npgsql;
namespace NpgsqlTypes
{
public class FastpathArg
{
/*
* Type of argument, true=integer, false=byte[]
*/
public Boolean type;
/*
* Integer value if type=true
*/
public Int32 value;
/*
* Byte value if type=false;
*/
public Byte[] bytes;
/*
* Constructs an argument that consists of an integer value
* @param value int value to set
*/
public FastpathArg(Int32 value)
{
type = true;
this.value = value;
}
/*
* Constructs an argument that consists of an array of bytes
* @param bytes array to store
*/
public FastpathArg(Byte[] bytes)
{
type = false;
this.bytes = bytes;
}
/*
* Constructs an argument that consists of part of a byte array
* @param buf source array
* @param off offset within array
* @param len length of data to include
*/
public FastpathArg(Byte[] buf, Int32 off, Int32 len)
{
type = false;
bytes = new Byte[len];
//TODO:
bytes = buf;
}
/*
* Constructs an argument that consists of a String.
* @param s String to store
*/
public FastpathArg(String s)
{
//this(s.ToCharArray());
}
/*
* This sends this argument down the network stream.
*
* The stream sent consists of the length.int4 then the contents.
*
*
Note: This is called from Fastpath, and cannot be called from
* client code.
*
* @param s output stream
* @exception IOException if something failed on the network stream
*/
public void Send(Stream s)
{
if (type)
{
// argument is an integer
PGUtil.WriteInt32(s, 4);
PGUtil.WriteInt32(s, value); // integer value of argument
}
else
{
// argument is a byte array
PGUtil.WriteInt32(s, bytes.Length);
s.Write(bytes, 0, bytes.Length);
}
}
public Int32 SendSize()
{
if (type)
{
return 8;
}
else
{
return 4 + bytes.Length;
}
}
}
}