Sys-Ibam

 view release on metacpan or  search on metacpan

Ibam.xs  view on Meta::CPAN

#include "ibam.hpp"

extern "C" {
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "proto.h"

#include "ppport.h"
}

SV*
new_ibam_object(ibam* i, char* CLASS)
{
	SV* obj;
	SV* sv;
	HV* stash;
	obj = (SV*)newHV();
	sv_magic(obj, 0, PERL_MAGIC_ext, (const char*)i, 0);
	sv = newRV_inc(obj);
	stash = gv_stashpv(CLASS, 1);
	sv_bless(sv, stash);

	return sv;
}

ibam*
get_ibam_object(SV* sv)
{
	MAGIC *mg;

	if (!sv || !SvOK(sv) || !SvROK(sv) || !(mg = mg_find(SvRV(sv), PERL_MAGIC_ext)))
		return NULL;
	return (ibam*)mg->mg_ptr;
}

bool
get_do_second_correction(SV* sv)
{
	if (!sv || !SvOK(sv) || !SvROK(sv))
		return FALSE;
	return SvTRUE(*hv_fetch((HV*)SvRV(sv), "do_second_correction", 20, 0));
}

MODULE = Sys::Ibam		PACKAGE = Sys::Ibam		

PROTOTYPES: ENABLE

void
ibam::new(do_second_correction=TRUE)
		int do_second_correction
	PPCODE:
		ST(0) = new_ibam_object(new ibam(), CLASS);
		HV* hv = (HV*)SvRV(ST(0));
		hv_store(hv, "do_second_correction", 20, newSViv(do_second_correction), 0);
		sv_2mortal(ST(0));
		XSRETURN(1);

void
ibam::DESTROY()

void
ibam::import_old_data()
	CODE:
		THIS->import();

void
ibam::update_statistics()

void
ibam::ignore_statistics()

void
ibam::save()

const char*
ibam::profile_filename(n, type)
		int n
		char* type
	PREINIT:
		int profile_type;
		string filename;
	CODE:
		if (strcmp(type, "full") == 0)
			profile_type = 0;
		else if (strcmp(type, "battery") == 0)
			profile_type = 1;
		else if (strcmp(type, "charge") == 0)
			profile_type = 2;
		else if (strcmp(type, "") == 0)
			profile_type = 3;
		else
			XSRETURN_UNDEF;

		filename = THIS->profile_filename(n, profile_type);
		RETVAL = filename.c_str();
	OUTPUT:
		RETVAL

int
ibam::current_profile_number()

char*
ibam::current_profile_type()
	PREINIT:
		char* types[4] = {"full", "battery", "charge", ""};
	CODE:
		RETVAL = types[(THIS->current_profile_type() & 3)];
	OUTPUT:
		RETVAL

void



( run in 0.445 second using v1.01-cache-2.11-cpan-5511b514fd6 )