/*
 *			GPAC - Multimedia Framework C SDK
 *
 *			Authors: Jean Le Feuvre
 *			Copyright (c) Telecom ParisTech 2000-2012
 *					All rights reserved
 *
 *  This file is part of GPAC / BIFS codec sub-project
 *
 *  GPAC is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  GPAC is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

#ifndef _SFSCRIPT_H
#define _SFSCRIPT_H

#include <gpac/internal/bifs_dev.h>

#if !defined(GPAC_DISABLE_BIFS) && defined(GPAC_HAS_QJS)

#define NUMBITS_STATEMENT	3
#define NUMBITS_EXPR_TYPE	6
#define MAX_NUM_EXPR		100

enum
{
	ST_IF=0,
	ST_FOR=1,
	ST_WHILE=2,
	ST_RETURN=3,
	ST_BREAK=5,
	ST_CONTINUE=6,
	ST_COMPOUND_EXPR=4,
	ST_SWITCH=7
};

enum
{
	ET_CURVED_EXPR=0,
	ET_NEGATIVE=1,
	ET_NOT=2,
	ET_ONESCOMP=3,
	ET_INCREMENT=4,
	ET_DECREMENT=5,
	ET_POST_INCREMENT=6,
	ET_POST_DECREMENT=7,
	ET_CONDTEST=8,
	ET_STRING=9,
	ET_NUMBER=10,
	ET_IDENTIFIER=11,
	ET_FUNCTION_CALL=12,
	ET_NEW=13, ET_OBJECTCONSTRUCT=13,
	ET_OBJECT_MEMBER_ACCESS=14,
	ET_OBJECT_METHOD_CALL=15,
	ET_ARRAY_DEREFERENCE=16,
	ET_ASSIGN=17,
	ET_PLUSEQ=18,
	ET_MINUSEQ=19,
	ET_MULTIPLYEQ=20,
	ET_DIVIDEEQ=21,
	ET_MODEQ=22,
	ET_ANDEQ=23,
	ET_OREQ=24,
	ET_XOREQ=25,
	ET_LSHIFTEQ=26,
	ET_RSHIFTEQ=27,
	ET_RSHIFTFILLEQ=28,
	ET_EQ=29,
	ET_NE=30,
	ET_LT=31,
	ET_LE=32,
	ET_GT=33,
	ET_GE=34,
	ET_PLUS=35,
	ET_MINUS=36,
	ET_MULTIPLY=37,
	ET_DIVIDE=38,
	ET_MOD=39,
	ET_LAND=40,
	ET_LOR=41,
	ET_AND=42,
	ET_OR=43,
	ET_XOR=44,
	ET_LSHIFT=45,
	ET_RSHIFT=46,
	ET_RSHIFTFILL=47,
	ET_BOOLEAN=48,
	ET_VAR=49,
	ET_FUNCTION_ASSIGN=50,
	NUMBER_OF_EXPR_TYPE=51
};

GF_Err SFScript_Parse(GF_BifsDecoder *codec, SFScript *script_field, GF_BitStream *bs, GF_Node *n);
#ifndef GPAC_DISABLE_BIFS_ENC
GF_Err SFScript_Encode(GF_BifsEncoder *codec, SFScript *script_field, GF_BitStream *bs, GF_Node *n);
#endif

#endif /* !defined(GPAC_DISABLE_BIFS) && defined(GPAC_HAS_QJS) */

#endif
