Below is memory.c changed to support all (I think) of the coding standards.
Please look it over and let me know.  Once the powers that be give the ok, I
will try to change all the source files to the standard.

Thanks!
Tanton

/* Memory.c
 *  Copyright: (When this is determined...it will go here)
 *  CVS Info
 *     $RCSfile: $
 *     $Revision: $
 *     $Date: $
 *  Overview:
 *     The memory (mem) API handles memory allocation
 *  Data Structure and Algorithms:
 *  History:
 *  Notes:
 *  References:
 */

#include "parrot/parrot.h"

/*=for api mem mem_allocate_aligned
   Allocate a chunk of memory aligned on a power-of-2 boundary
*/
void *
mem_allocate_aligned(IV size) {
  IV max_to_alloc;
  IV mask;
  IV i;
  void *mem = NULL;

  /* Okay, we just brute-force things here. Yeah it's stupid, but it
     works */
  for (i = 1; i < 0xffffff; i <<= 1) {
    if (size > i) {
      mask = ~(i*2 - 1);
      max_to_alloc = i*4;
    }
    else {
      break;
    }
  }
    
  mem = malloc(max_to_alloc);
  if (((IV)mem & mask) < (IV)mem) {
    mem = (void *)(((IV)mem & mask) + ~mask + 1);
  } 
  return mem;
}

/*=for api mem mem_sys_allocate
   uses malloc to allocate system memory
*/
void *
mem_sys_allocate(IV size) {
  return malloc(size);
}

/*=for api mem mem_setup_allocator
   initializes the allocator
*/
void
mem_setup_allocator(struct Perl_Interp *interpreter) {
}

/*
 *Local Variables:
 *c-indentation-style: bsd
 *c-basic-offset: 4
 *indent-tabs-mode: nil
 *End
 *
 *vim: expandtab shiftwidth=4:
*/

Reply via email to