/*-------------------------------------------------------------------------
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
{
///
/// Fast Path Arg.
///
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.
///
/// Int value to set.
public FastpathArg(Int32 value)
{
type = true;
this.value = value;
}
///
/// Constructs an argument that consists of an array of bytes.
///
/// Array to store.
public FastpathArg(Byte[] bytes)
{
type = false;
this.bytes = bytes;
}
///
/// Constructs an argument that consists of part of a byte array.
///
/// Source array.
/// offset within array.
/// 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.
///
/// 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.
///
///
internal 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);
}
}
///
/// Report send size.
///
/// Send size.
public Int32 SendSize()
{
if (type)
{
return 8;
}
else
{
return 4 + bytes.Length;
}
}
}
}