Bug 385923: Remove unused code from nsRenderingContextImpl. rs=pavlov.
authorsharparrow1@yahoo.com
Tue, 26 Jun 2007 17:24:56 -0700
changeset 2815 63edce654440c1dd8bd0ead329ae9c97b65b5718
parent 2814 a9472085446f4a6431b35bb8c73fbf90baa3cf31
child 2816 a072c3ac65e1a5d986eeaa0a14475137e22918b0
push idunknown
push userunknown
push dateunknown
reviewerspavlov
bugs385923
milestone1.9a6pre
Bug 385923: Remove unused code from nsRenderingContextImpl. rs=pavlov.
gfx/src/nsRenderingContextImpl.h
gfx/src/shared/nsRenderingContextImpl.cpp
--- a/gfx/src/nsRenderingContextImpl.h
+++ b/gfx/src/nsRenderingContextImpl.h
@@ -42,108 +42,41 @@
 #include "nsIRenderingContext.h"
 #include "nsPoint.h"
 #include "nsSize.h"
 
 #ifdef MOZ_CAIRO_GFX
 class gfxContext;
 #endif
 
-typedef struct {	
-    double x;	  // x coordinate of edge's intersection with current scanline */
-    double dx;	// change in x with respect to y 
-    int i;	    // edge number: edge i goes from mPointList[i] to mPointList[i+1] 
-} Edge;
-
 class nsRenderingContextImpl : public nsIRenderingContext
 {
 
 // CLASS MEMBERS
-public:
-
-
-protected:
-  nsTransform2D		  *mTranMatrix;				// The rendering contexts transformation matrix
-  int               mAct;		        		// number of active edges 
-  Edge              *mActive;	      		// active edge list:edges crossing scanline y
 
 public:
   nsRenderingContextImpl();
 
 
 // CLASS METHODS
 
-  // See the description in nsIRenderingContext.h
-  NS_IMETHOD FlushRect(const nsRect& aRect);
-  NS_IMETHOD FlushRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight);
-
-  /**
-   * Gets the Pen Mode for the RenderingContext
-   * @param aPenMode The Pen Mode to be retrieved
-   * @return NS_OK if the Pen Mode is correctly retrieved
-   */
-  NS_IMETHOD GetPenMode(nsPenMode &aPenMode) { return NS_ERROR_FAILURE;}
-
-  virtual void* GetNativeGraphicData(nsIRenderingContext::GraphicDataType aType)
-  { return nsnull; }
-
-  /**
-   * Sets the Pen Mode for the RenderingContext 
-   * @param aPenMode The Pen Mode
-   * @return NS_OK if the Pen Mode is correctly set
-   */
-  NS_IMETHOD SetPenMode(nsPenMode aPenMode) { return NS_ERROR_FAILURE;}
-  
-  NS_IMETHOD PushTranslation(PushedTranslation* aState);
-  NS_IMETHOD PopTranslation(PushedTranslation* aState);
-  NS_IMETHOD SetTranslation(nscoord aX, nscoord aY);
-
   /**
    * Return the maximum length of a string that can be handled by the platform
    * using the current font metrics.
    * The implementation here is just a stub; classes that don't override
    * the safe string methods need to implement this.
    */
-  virtual PRInt32 GetMaxStringLength() { return 1; }
+  virtual PRInt32 GetMaxStringLength() = 0;
 
   /**
    * Let the device context know whether we want text reordered with
    * right-to-left base direction
    */
-  NS_IMETHOD SetRightToLeftText(PRBool aIsRTL);
   NS_IMETHOD GetRightToLeftText(PRBool* aIsRTL);
 
-#ifndef MOZ_CAIRO_GFX
-  NS_IMETHOD DrawImage(imgIContainer *aImage, const nsRect & aSrcRect, const nsRect & aDestRect);
-#endif
-  NS_IMETHOD DrawTile(imgIContainer *aImage, nscoord aXOffset, nscoord aYOffset, const nsRect * aTargetRect);
-
-  NS_IMETHOD GetClusterInfo(const PRUnichar *aText,
-                            PRUint32 aLength,
-                            PRUint8 *aClusterStarts);
-  virtual PRInt32 GetPosition(const PRUnichar *aText,
-                              PRUint32 aLength,
-                              nsPoint aPt);
-
-  NS_IMETHOD GetRangeWidth(const PRUnichar *aText,
-                           PRUint32 aLength,
-                           PRUint32 aStart,
-                           PRUint32 aEnd,
-                           PRUint32 &aWidth);
-  NS_IMETHOD GetRangeWidth(const char *aText,
-                           PRUint32 aLength,
-                           PRUint32 aStart,
-                           PRUint32 aEnd,
-                           PRUint32 &aWidth);
-
-  // Silence C++ hiding warnings
-  NS_IMETHOD GetWidth(char aC, nscoord &aWidth) = 0;
-  NS_IMETHOD GetWidth(PRUnichar aC, nscoord &aWidth,
-                      PRInt32 *aFontID = nsnull) = 0;
-
   // Safe string method variants: by default, these defer to the more
   // elaborate methods below
   NS_IMETHOD GetWidth(const nsString& aString, nscoord &aWidth,
                       PRInt32 *aFontID = nsnull);
   NS_IMETHOD GetWidth(const char* aString, nscoord& aWidth);
   NS_IMETHOD DrawString(const nsString& aString, nscoord aX, nscoord aY,
                         PRInt32 aFontID = -1,
                         const nscoord* aSpacing = nsnull);
@@ -255,71 +188,19 @@ public:
                                 const nscoord* aSpacing = nsnull)
   { return NS_ERROR_NOT_IMPLEMENTED; }
   NS_IMETHOD DrawStringInternal(const PRUnichar *aString, PRUint32 aLength,
                                 nscoord aX, nscoord aY,
                                 PRInt32 aFontID = -1,
                                 const nscoord* aSpacing = nsnull)
   { return NS_ERROR_NOT_IMPLEMENTED; }
 
-  NS_IMETHOD RenderEPS(const nsRect& aRect, FILE *aDataFile);
-
 #ifdef MOZ_CAIRO_GFX
   NS_IMETHOD Init(nsIDeviceContext* aContext, gfxASurface* aThebesSurface) { return NS_ERROR_NOT_IMPLEMENTED; }
   NS_IMETHOD Init(nsIDeviceContext* aContext, gfxContext* aThebesContext) { return NS_ERROR_NOT_IMPLEMENTED; }
 #endif
 
 protected:
   virtual ~nsRenderingContextImpl();
 
-  /**
-   * Determine if a rect's width and height will fit within a specified width and height
-   * @param aRect rectangle to test
-   * @param aWidth width to determine if the rectangle's width will fit within
-   * @param aHeight height to determine if the rectangles height will fit within
-   * @returns PR_TRUE if the rect width and height fits with aWidth, aHeight, PR_FALSE
-   * otherwise.
-   */
-
-  PRBool RectFitsInside(const nsRect& aRect, PRInt32 aWidth, PRInt32 aHeight) const;
-
-  /**
-   * Determine if two rectangles width and height will fit within a specified width and height
-   * @param aRect1 first rectangle to test
-   * @param aRect1 second rectangle to test
-   * @param aWidth width to determine if both rectangle's width will fit within
-   * @param aHeight height to determine if both rectangles height will fit within
-   * @returns PR_TRUE if the rect1's and rect2's width and height fits with aWidth,
-   * aHeight, PR_FALSE otherwise.
-   */
-  PRBool BothRectsFitInside(const nsRect& aRect1, const nsRect& aRect2, PRInt32 aWidth, PRInt32 aHeight, nsRect& aNewSize) const;
-
-  /**
-   * Return an offscreen surface size from a set of discrete surface sizes.
-   * The smallest discrete surface size that can enclose both the Maximum widget 
-   * size (@see GetMaxWidgetBounds) and the requested size is returned.
-   *
-   * @param aMaxBackbufferSize Maximum size that may be requested for the backbuffer
-   * @param aRequestedSize Requested size for the offscreen.
-   * @param aSurfaceSize contains the surface size 
-   */
-  void CalculateDiscreteSurfaceSize(const nsRect& aMaxBackbufferSize, const nsRect& aRequestedSize, nsRect& aSize);
-
-  /**
-   * Get the size of the offscreen drawing surface..
-   *
-   * @param aMaxBackbufferSize Maximum size that may be requested for the backbuffer
-   * @param aRequestedSize Desired size for the offscreen.
-   * @param aSurfaceSize   Offscreen adjusted to a discrete size which encloses aRequestedSize.
-   */
-  void GetDrawingSurfaceSize(const nsRect& aMaxBackbufferSize, const nsRect& aRequestedSize, nsRect& aSurfaceSize);
-
-public:
-
-protected:
-  nsPenMode   mPenMode;
-private:
-  // Largest requested offscreen size if larger than a full screen.
-  static nsSize gLargestRequestedSize;
-
 };
 
 #endif /* nsRenderingContextImpl */
--- a/gfx/src/shared/nsRenderingContextImpl.cpp
+++ b/gfx/src/shared/nsRenderingContextImpl.cpp
@@ -34,391 +34,51 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsCOMPtr.h"
 #include "nsRenderingContextImpl.h"
 #include "nsIDeviceContext.h"
 #include "nsIImage.h"
-#include "nsTransform2D.h"
 #include "nsIRegion.h"
 #include "nsIFontMetrics.h"
 #include <stdlib.h>
 
 
-nsSize nsRenderingContextImpl::gLargestRequestedSize = nsSize(0, 0);
-
-
 /** ---------------------------------------------------
  *  See documentation in nsIRenderingContext.h
  *	@update 3/16/00 dwc
  */
 nsRenderingContextImpl :: nsRenderingContextImpl()
-: mTranMatrix(nsnull)
-, mAct(0)
-, mActive(nsnull)
-, mPenMode(nsPenMode_kNone)
 {
 }
 
 /** ---------------------------------------------------
  *  See documentation in nsIRenderingContext.h
  *	@update 3/16/00 dwc
  */
 nsRenderingContextImpl :: ~nsRenderingContextImpl()
 {
 
 
 }
 
-NS_IMETHODIMP nsRenderingContextImpl::PushTranslation(PushedTranslation* aState)
-{
-  // The transform components are saved and restored instead 
-  // of using PushState and PopState because they are too slow
-  // because they also save and restore the clip state.
-  // Note: Setting a negative translation to restore the 
-  // state does not work because the floating point errors can accumulate
-  // causing the display of some frames to be off by one pixel. 
-  // This happens frequently when running in 120DPI mode where frames are
-  // often positioned at 1/2 pixel locations and small floating point errors
-  // will cause the frames to vary their pixel x location during scrolling
-  // operations causes a single scan line of pixels to be shifted left relative
-  // to the other scan lines for the same text. 
-  
-  // Save the transformation matrix's translation components.
-  nsTransform2D *theTransform; 
-  GetCurrentTransform(theTransform);
-  NS_ASSERTION(theTransform != nsnull, "The rendering context transform is null");
-  theTransform->GetTranslation(&aState->mSavedX, &aState->mSavedY);
-  
-  return NS_OK;
-}
-
-NS_IMETHODIMP nsRenderingContextImpl::PopTranslation(PushedTranslation* aState)
-{
-  nsTransform2D *theTransform; 
-  GetCurrentTransform(theTransform);
-  NS_ASSERTION(theTransform != nsnull, "The rendering context transform is null");
-  theTransform->SetTranslation(aState->mSavedX, aState->mSavedY);
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP nsRenderingContextImpl::SetTranslation(nscoord aX, nscoord aY)
-{
-  nsTransform2D *theTransform; 
-  GetCurrentTransform(theTransform);
-  NS_ASSERTION(theTransform != nsnull, "The rendering context transform is null");
-  theTransform->SetTranslation(aX, aY);
-  return NS_OK;
-}
-
-PRBool nsRenderingContextImpl::RectFitsInside(const nsRect& aRect, PRInt32 aWidth, PRInt32 aHeight) const
-{
-  if (aRect.width > aWidth)
-    return (PR_FALSE);
-
-  if (aRect.height > aHeight)
-    return (PR_FALSE);
-
-  return PR_TRUE;
-}
-
-PRBool nsRenderingContextImpl::BothRectsFitInside(const nsRect& aRect1, const nsRect& aRect2, PRInt32 aWidth, PRInt32 aHeight, nsRect& aNewSize) const
-{
-  if (PR_FALSE == RectFitsInside(aRect1, aWidth, aHeight)) {
-    return PR_FALSE;
-  }
-
-  if (PR_FALSE == RectFitsInside(aRect2, aWidth, aHeight)) {
-    return PR_FALSE;
-  }
-
-  aNewSize.width = aWidth;
-  aNewSize.height = aHeight;
-
-  return PR_TRUE;
-}
-
-void nsRenderingContextImpl::GetDrawingSurfaceSize(const nsRect& aMaxBackbufferSize, const nsRect& aRequestedSize, nsRect& aNewSize) 
-{ 
-  CalculateDiscreteSurfaceSize(aMaxBackbufferSize, aRequestedSize, aNewSize);
-  aNewSize.MoveTo(aRequestedSize.x, aRequestedSize.y);
-}
-
-void nsRenderingContextImpl::CalculateDiscreteSurfaceSize(const nsRect& aMaxBackbufferSize, const nsRect& aRequestedSize, nsRect& aSurfaceSize) 
-{
-  // Get the height and width of the screen
-  nscoord height;
-  nscoord width;
-
-  nsCOMPtr<nsIDeviceContext>  dx;
-  GetDeviceContext(*getter_AddRefs(dx));
-  dx->GetDeviceSurfaceDimensions(width, height);
-
-  PRInt32 p2a = dx->AppUnitsPerDevPixel();
-  PRInt32 screenHeight = NSAppUnitsToIntPixels(height, p2a);
-  PRInt32 screenWidth = NSAppUnitsToIntPixels(width, p2a);
-
-  // These tests must go from smallest rectangle to largest rectangle.
-
-  // 1/8 screen
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, screenWidth / 8, screenHeight / 8, aSurfaceSize)) {
-    return;
-  }
-
-  // 1/4 screen
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, screenWidth / 4, screenHeight / 4, aSurfaceSize)) {
-    return;
-  }
-
-  // 1/2 screen
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, screenWidth / 2, screenHeight / 2, aSurfaceSize)) {
-    return;
-  }
-
-  // 3/4 screen
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, (screenWidth * 3) / 4, (screenHeight * 3) / 4, aSurfaceSize)) {
-    return;
-  }
-
-  // 3/4 screen width full screen height
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, (screenWidth * 3) / 4, screenHeight, aSurfaceSize)) {
-    return;
-  }
-
-  // Full screen
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, screenWidth, screenHeight, aSurfaceSize)) {
-    return;
-  }
-
-  // Bigger than Full Screen use the largest request every made.
-  if (BothRectsFitInside(aRequestedSize, aMaxBackbufferSize, gLargestRequestedSize.width, gLargestRequestedSize.height, aSurfaceSize)) {
-    return;
-  } else {
-    gLargestRequestedSize.width = PR_MAX(aRequestedSize.width, aMaxBackbufferSize.width);
-    gLargestRequestedSize.height = PR_MAX(aRequestedSize.height, aMaxBackbufferSize.height);
-    aSurfaceSize.width = gLargestRequestedSize.width;
-    aSurfaceSize.height = gLargestRequestedSize.height;
-    //   printf("Expanding the largested requested size to %d %d\n", gLargestRequestedSize.width, gLargestRequestedSize.height);
-  }
-}
-
-
-
-/**
- * Let the device context know whether we want text reordered with
- * right-to-left base direction
- */
-NS_IMETHODIMP
-nsRenderingContextImpl::SetRightToLeftText(PRBool aIsRTL)
-{
-  return NS_OK;
-}
-
 NS_IMETHODIMP
 nsRenderingContextImpl::GetRightToLeftText(PRBool* aIsRTL)
 {
   *aIsRTL = PR_FALSE;
   return NS_OK;
 }
 
 #include "imgIContainer.h"
 #include "gfxIImageFrame.h"
 #include "nsIInterfaceRequestor.h"
 #include "nsIInterfaceRequestorUtils.h"
 
-#ifndef MOZ_CAIRO_GFX
-NS_IMETHODIMP nsRenderingContextImpl::DrawImage(imgIContainer *aImage, const nsRect & aSrcRect, const nsRect & aDestRect)
-{
-  nsRect dr = aDestRect;
-  mTranMatrix->TransformCoord(&dr.x, &dr.y, &dr.width, &dr.height);
-
-  // We should NOT be transforming the source rect (which is based on the image
-  // origin) using the rendering context's translation!
-  // However, given that we are, remember that the transformation of a
-  // height depends on the position, since what we are really doing is
-  // transforming the edges.  So transform *with* a translation, based
-  // on the origin of the *destination* rect, and then fix up the
-  // origin.
-  nsRect sr(aDestRect.TopLeft(), aSrcRect.Size());
-  mTranMatrix->TransformCoord(&sr.x, &sr.y, &sr.width, &sr.height);
-  
-  if (sr.IsEmpty() || dr.IsEmpty())
-    return NS_OK;
-
-  sr.MoveTo(aSrcRect.TopLeft());
-  mTranMatrix->TransformNoXLateCoord(&sr.x, &sr.y);
-
-  nsCOMPtr<gfxIImageFrame> iframe;
-  aImage->GetCurrentFrame(getter_AddRefs(iframe));
-  if (!iframe) return NS_ERROR_FAILURE;
-
-  nsCOMPtr<nsIImage> img(do_GetInterface(iframe));
-  if (!img) return NS_ERROR_FAILURE;
-
-  nsIDrawingSurface *surface = nsnull;
-  GetDrawingSurface(&surface);
-  if (!surface) return NS_ERROR_FAILURE;
-
-  // For Bug 87819
-  // iframe may want image to start at different position, so adjust
-  nsRect iframeRect;
-  iframe->GetRect(iframeRect);
-  
-  if (iframeRect.x > 0) {
-    // Adjust for the iframe offset before we do scaling.
-    sr.x -= iframeRect.x;
-
-    nscoord scaled_x = sr.x;
-    if (dr.width != sr.width) {
-      PRFloat64 scale_ratio = PRFloat64(dr.width) / PRFloat64(sr.width);
-      scaled_x = NSToCoordRound(scaled_x * scale_ratio);
-    }
-    if (sr.x < 0) {
-      dr.x -= scaled_x;
-      sr.width += sr.x;
-      dr.width += scaled_x;
-      if (sr.width <= 0 || dr.width <= 0)
-        return NS_OK;
-      sr.x = 0;
-    } else if (sr.x > iframeRect.width) {
-      return NS_OK;
-    }
-  }
-
-  if (iframeRect.y > 0) {
-    // Adjust for the iframe offset before we do scaling.
-    sr.y -= iframeRect.y;
-
-    nscoord scaled_y = sr.y;
-    if (dr.height != sr.height) {
-      PRFloat64 scale_ratio = PRFloat64(dr.height) / PRFloat64(sr.height);
-      scaled_y = NSToCoordRound(scaled_y * scale_ratio);
-    }
-    if (sr.y < 0) {
-      dr.y -= scaled_y;
-      sr.height += sr.y;
-      dr.height += scaled_y;
-      if (sr.height <= 0 || dr.height <= 0)
-        return NS_OK;
-      sr.y = 0;
-    } else if (sr.y > iframeRect.height) {
-      return NS_OK;
-    }
-  }
-
-  // Multiple paint rects may have been coalesced into a bounding box, so
-  // ensure that this rect is actually within the clip region before we draw.
-  nsCOMPtr<nsIRegion> clipRegion;
-  GetClipRegion(getter_AddRefs(clipRegion));
-  if (clipRegion && !clipRegion->ContainsRect(dr.x, dr.y, dr.width, dr.height))
-    return NS_OK;
-
-  return img->Draw(*this, surface, sr.x, sr.y, sr.width, sr.height,
-                   dr.x, dr.y, dr.width, dr.height);
-}
-#endif
-
-/* [noscript] void drawTile (in imgIContainer aImage, in nscoord aXImageStart, in nscoord aYImageStart, [const] in nsRect aTargetRect); */
-NS_IMETHODIMP
-nsRenderingContextImpl::DrawTile(imgIContainer *aImage,
-                                 nscoord aXImageStart, nscoord aYImageStart,
-                                 const nsRect * aTargetRect)
-{
-  nsRect dr(*aTargetRect);
-  mTranMatrix->TransformCoord(&dr.x, &dr.y, &dr.width, &dr.height);
-  mTranMatrix->TransformCoord(&aXImageStart, &aYImageStart);
-
-  // may have become empty due to transform shinking small number to 0
-  if (dr.IsEmpty())
-    return NS_OK;
-
-  nscoord width, height;
-  aImage->GetWidth(&width);
-  aImage->GetHeight(&height);
-
-  if (width == 0 || height == 0)
-    return NS_OK;
-
-  nscoord xOffset = (dr.x - aXImageStart) % width;
-  nscoord yOffset = (dr.y - aYImageStart) % height;
-
-  nsCOMPtr<gfxIImageFrame> iframe;
-  aImage->GetCurrentFrame(getter_AddRefs(iframe));
-  if (!iframe) return NS_ERROR_FAILURE;
-
-  nsCOMPtr<nsIImage> img(do_GetInterface(iframe));
-  if (!img) return NS_ERROR_FAILURE;
-
-  nsIDrawingSurface *surface = nsnull;
-  GetDrawingSurface(&surface);
-  if (!surface) return NS_ERROR_FAILURE;
-
-  /* bug 113561 - frame can be smaller than container */
-  nsRect iframeRect;
-  iframe->GetRect(iframeRect);
-  PRInt32 padx = width - iframeRect.width;
-  PRInt32 pady = height - iframeRect.height;
-
-  return img->DrawTile(*this, surface,
-                       xOffset - iframeRect.x, yOffset - iframeRect.y,
-                       padx, pady,
-                       dr);
-}
-
-NS_IMETHODIMP
-nsRenderingContextImpl::FlushRect(const nsRect& aRect)
-{
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRenderingContextImpl::FlushRect(nscoord aX, nscoord aY, nscoord aWidth, nscoord aHeight)
-{
-    return NS_OK;
-}
-
-NS_IMETHODIMP
-nsRenderingContextImpl::GetClusterInfo(const PRUnichar *aText,
-                                       PRUint32 aLength,
-                                       PRUint8 *aClusterStarts)
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-PRInt32
-nsRenderingContextImpl::GetPosition(const PRUnichar *aText,
-                                    PRUint32 aLength,
-                                    nsPoint aPt)
-{
-  return -1;
-}
-
-NS_IMETHODIMP
-nsRenderingContextImpl::GetRangeWidth(const PRUnichar *aText,
-                                      PRUint32 aLength,
-                                      PRUint32 aStart,
-                                      PRUint32 aEnd,
-                                      PRUint32 &aWidth)
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-nsRenderingContextImpl::GetRangeWidth(const char *aText,
-                                      PRUint32 aLength,
-                                      PRUint32 aStart,
-                                      PRUint32 aEnd,
-                                      PRUint32 &aWidth)
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
 // Hard limit substring lengths to 8000 characters ... this lets us statically
 // size the cluster buffer array in FindSafeLength
 #define MAX_GFX_TEXT_BUF_SIZE 8000
 static PRInt32 GetMaxChunkLength(nsRenderingContextImpl* aContext)
 {
   PRInt32 len = aContext->GetMaxStringLength();
   return PR_MIN(len, MAX_GFX_TEXT_BUF_SIZE);
 }
@@ -855,14 +515,8 @@ nsRenderingContextImpl::DrawString(const
     }
     aString += len;
     if (aSpacing) {
       aSpacing += len;
     }
   }
   return NS_OK;
 }
-
-NS_IMETHODIMP
-nsRenderingContextImpl::RenderEPS(const nsRect& aRect, FILE *aDataFile)
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}