/*
 * The contents of this file are subject to the Mozilla Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is Frank
 * Mitchell. Portions created by Frank Mitchell are
 * Copyright (C) 1999 Frank Mitchell. All
 * Rights Reserved.
 *
 * Contributor(s): 
 *    Frank Mitchell (frank.mitchell@sun.com)
 */
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 *
 * blah blah blah.
 */

#include "nsISupports.idl"

interface JSIComplex;

[object, uuid(57ecad90-ae1a-11d1-b66c-00805f8a2676)]
interface JSISample : nsISupports {

    // basic method
    void PrintStats();

    // attributes
    attribute long someInt;
    attribute boolean someBool;
    readonly attribute long roInt;
    attribute double someDouble;
    attribute string someName;
    readonly attribute string roString;

    // methods
    void TakeInt(in long anInt);
    long  GiveInt();
    long  GiveAndTake(inout long anInt);

    string TooManyArgs(in short oneInt, 
                       in short twoInt, 
                       inout long redInt,  
                       out short blueInt, 
                       in double orNothing, 
                       in long long johnSilver, 
                       in boolean algebra);

    string CatStrings(in string str1, in string str2);
    void AppendString(inout string str1, in string str2);

    JSIComplex NewComplex(in long aReal, in long anImaginary);
    JSIComplex AddComplex(in JSIComplex complex1, in JSIComplex complex2);
    void AddInPlace(inout JSIComplex complex1, in JSIComplex complex2);

    long AddTwoInts(in long int1, in long int2);
};

[object, uuid(57ecad91-ae1a-11d1-b66c-00805f8a2676)]
interface JSIComplex : nsISupports {
    // attributes
    attribute long real;
    attribute long imaginary;
};
