FastpathArg.java
上传用户:psq1974
上传日期:2007-01-06
资源大小:1195k
文件大小:2k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. package postgresql.fastpath;
  2. import java.io.*;
  3. import java.lang.*;
  4. import java.net.*;
  5. import java.util.*;
  6. import java.sql.*;
  7. import postgresql.util.*;
  8. /**
  9.  * Each fastpath call requires an array of arguments, the number and type
  10.  * dependent on the function being called.
  11.  *
  12.  * <p>This class implements methods needed to provide this capability.
  13.  *
  14.  * <p>For an example on how to use this, refer to the postgresql.largeobject
  15.  * package
  16.  *
  17.  * @see postgresql.fastpath.Fastpath
  18.  * @see postgresql.largeobject.LargeObjectManager
  19.  * @see postgresql.largeobject.LargeObject
  20.  */
  21. public class FastpathArg
  22. {
  23.   /**
  24.    * Type of argument, true=integer, false=byte[]
  25.    */
  26.   public boolean type;
  27.   
  28.   /**
  29.    * Integer value if type=true
  30.    */
  31.   public int value;
  32.   
  33.   /**
  34.    * Byte value if type=false;
  35.    */
  36.   public byte[] bytes;
  37.   
  38.   /**
  39.    * Constructs an argument that consists of an integer value
  40.    * @param value int value to set
  41.    */
  42.   public FastpathArg(int value)
  43.   {
  44.     type=true;
  45.     this.value=value;
  46.   }
  47.   
  48.   /**
  49.    * Constructs an argument that consists of an array of bytes
  50.    * @param bytes array to store
  51.    */
  52.   public FastpathArg(byte bytes[])
  53.   {
  54.     type=false;
  55.     this.bytes=bytes;
  56.   }
  57.   
  58.   /**
  59.    * Constructs an argument that consists of part of a byte array
  60.    * @param buf source array
  61.    * @param off offset within array
  62.    * @param len length of data to include
  63.    */
  64.   public FastpathArg(byte buf[],int off,int len)
  65.   {
  66.     type=false;
  67.     bytes = new byte[len];
  68.     System.arraycopy(buf,off,bytes,0,len);
  69.   }
  70.   
  71.   /**
  72.    * Constructs an argument that consists of a String.
  73.    * @param s String to store
  74.    */
  75.   public FastpathArg(String s)
  76.   {
  77.     this(s.getBytes());
  78.   }
  79.   
  80.   /**
  81.    * This sends this argument down the network stream.
  82.    *
  83.    * <p>The stream sent consists of the length.int4 then the contents.
  84.    *
  85.    * <p><b>Note:</b> This is called from Fastpath, and cannot be called from
  86.    * client code.
  87.    *
  88.    * @param s output stream
  89.    * @exception IOException if something failed on the network stream
  90.    */
  91.   protected void send(postgresql.PG_Stream s) throws IOException
  92.   {
  93.     if(type) {
  94.       // argument is an integer
  95.       s.SendInteger(4,4); // size of an integer
  96.       s.SendInteger(value,4); // integer value of argument
  97.     } else {
  98.       // argument is a byte array
  99.       s.SendInteger(bytes.length,4); // size of array
  100.       s.Send(bytes);
  101.     }
  102.   }
  103. }