1 // javaprims.h - Main external header file for libgcj. -*- c++ -*-
4 /* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
5 2008, 2009 Free Software Foundation
7 This file is part of libgcj.
9 This software is copyrighted work licensed under the terms of the
10 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
13 #ifndef __JAVAPRIMS_H__
14 #define __JAVAPRIMS_H__
16 // Force C++ compiler to use Java-style exceptions.
17 #pragma GCC java_exceptions
19 #include <gcj/libgcj-config.h>
21 // FIXME: this is a hack until we get a proper gcjh.
22 // It is needed to work around system header files that define TRUE
29 // JNI calling convention also defined in jni.h */
31 #if (defined (_WIN32) || defined (__WIN32__) || defined (WIN32)) && !defined (_WIN64)
32 #define JNICALL __stdcall
38 // To force selection of correct types that will mangle consistently
42 typedef __java_byte jbyte;
43 typedef __java_short jshort;
44 typedef __java_int jint;
45 typedef __java_long jlong;
46 typedef __java_float jfloat;
47 typedef __java_double jdouble;
48 typedef __java_char jchar;
49 typedef __java_boolean jboolean;
52 // The following class declarations are automatically generated by
53 // the `classes.pl' script.
58 class BufferedInputStream;
59 class BufferedOutputStream;
62 class ByteArrayInputStream;
63 class ByteArrayOutputStream;
64 class CharArrayReader;
65 class CharArrayWriter;
66 class CharConversionException;
69 class DataInputStream;
71 class DataOutputStream;
72 class DeleteFileHelper;
73 class DeleteFileHelper$1;
79 class FileInputStream;
80 class FileNotFoundException;
81 class FileOutputStream;
86 class FilterInputStream;
87 class FilterOutputStream;
93 class InputStreamReader;
94 class InterruptedIOException;
95 class InvalidClassException;
96 class InvalidObjectException;
97 class LineNumberInputStream;
98 class LineNumberReader;
99 class NotActiveException;
100 class NotSerializableException;
102 class ObjectInputStream;
103 class ObjectInputStream$1;
104 class ObjectInputStream$2;
105 class ObjectInputStream$GetField;
106 class ObjectInputStream$ValidatorAndPriority;
107 class ObjectInputValidation;
109 class ObjectOutputStream;
110 class ObjectOutputStream$1;
111 class ObjectOutputStream$PutField;
112 class ObjectStreamClass;
113 class ObjectStreamClass$1;
114 class ObjectStreamClass$2;
115 class ObjectStreamClass$InterfaceComparator;
116 class ObjectStreamClass$MemberComparator;
117 class ObjectStreamConstants;
118 class ObjectStreamException;
119 class ObjectStreamField;
120 class ObjectStreamField$1;
121 class OptionalDataException;
123 class OutputStreamWriter;
124 class PipedInputStream;
125 class PipedOutputStream;
130 class PushbackInputStream;
131 class PushbackReader;
132 class RandomAccessFile;
134 class SequenceInputStream;
136 class SerializablePermission;
137 class StreamCorruptedException;
138 class StreamTokenizer;
139 class StringBufferInputStream;
142 class SyncFailedException;
143 class UTFDataFormatException;
144 class UnsupportedEncodingException;
145 class VMObjectInputStream;
146 class VMObjectStreamClass;
147 class WriteAbortedException;
153 class AbstractMethodError;
154 class AbstractStringBuffer;
156 class ArithmeticException;
157 class ArrayIndexOutOfBoundsException;
158 class ArrayStoreException;
159 class AssertionError;
164 class Character$Subset;
165 class Character$UnicodeBlock;
166 class Character$UnicodeBlock$NameType;
169 class ClassCastException;
170 class ClassCircularityError;
171 class ClassFormatError;
173 class ClassLoader$AnnotationsKey;
174 class ClassNotFoundException;
175 class CloneNotSupportedException;
183 class EnumConstantNotPresentException;
186 class ExceptionInInitializerError;
188 class IllegalAccessError;
189 class IllegalAccessException;
190 class IllegalArgumentException;
191 class IllegalMonitorStateException;
192 class IllegalStateException;
193 class IllegalThreadStateException;
194 class IncompatibleClassChangeError;
195 class IndexOutOfBoundsException;
196 class InheritableThreadLocal;
197 class InstantiationError;
198 class InstantiationException;
201 class InterruptedException;
206 class NegativeArraySizeException;
207 class NoClassDefFoundError;
208 class NoSuchFieldError;
209 class NoSuchFieldException;
210 class NoSuchMethodError;
211 class NoSuchMethodException;
212 class NullPointerException;
214 class NumberFormatException;
216 class OutOfMemoryError;
220 class PosixProcess$EOFInputStream;
221 class PosixProcess$ProcessManager;
223 class ProcessBuilder;
227 class RuntimeException;
228 class RuntimePermission;
229 class SecurityException;
230 class SecurityManager;
231 class SecurityManager$1;
233 class StackOverflowError;
234 class StackTraceElement;
237 class String$CaseInsensitiveComparator;
240 class StringIndexOutOfBoundsException;
241 class SuppressWarnings;
243 class System$EnvironmentCollection;
244 class System$EnvironmentMap;
245 class System$EnvironmentSet;
248 class Thread$UncaughtExceptionHandler;
252 class ThreadLocalMap;
253 class ThreadLocalMap$Entry;
255 class Throwable$StaticData;
256 class TypeNotPresentException;
258 class UnsatisfiedLinkError;
259 class UnsupportedClassVersionError;
260 class UnsupportedOperationException;
268 class VirtualMachineError;
271 class Win32Process$EOFInputStream;
275 class AnnotationFormatError;
276 class AnnotationTypeMismatchException;
279 class IncompleteAnnotationException;
282 class RetentionPolicy;
288 class ClassDefinition;
289 class ClassFileTransformer;
290 class IllegalClassFormatException;
291 class Instrumentation;
292 class UnmodifiableClassException;
297 class ClassLoadingMXBean;
298 class CompilationMXBean;
299 class GarbageCollectorMXBean;
301 class ManagementFactory;
302 class ManagementFactory$ManagementInvocationHandler;
303 class ManagementPermission;
305 class MemoryManagerMXBean;
306 class MemoryNotificationInfo;
307 class MemoryPoolMXBean;
311 class OperatingSystemMXBean;
315 class VMManagementFactory;
320 class PhantomReference;
322 class ReferenceQueue;
329 class AccessibleObject;
330 class AnnotatedElement;
334 class GenericArrayType;
335 class GenericDeclaration;
336 class GenericSignatureFormatError;
337 class InvocationHandler;
338 class InvocationTargetException;
339 class MalformedParameterizedTypeException;
343 class ParameterizedType;
345 class Proxy$ClassFactory;
346 class Proxy$ProxyData;
347 class Proxy$ProxySignature;
348 class Proxy$ProxyType;
349 class ReflectPermission;
352 class UndeclaredThrowableException;
360 class AbstractCollection;
362 class AbstractList$1;
363 class AbstractList$2;
364 class AbstractList$3;
365 class AbstractList$RandomAccessSubList;
366 class AbstractList$SubList;
372 class AbstractMap$SimpleEntry;
373 class AbstractMap$SimpleImmutableEntry;
375 class AbstractSequentialList;
378 class ArrayDeque$DeqIterator;
379 class ArrayDeque$DescendingIterator;
382 class Arrays$ArrayList;
388 class Collections$1$SynchronizedMapEntry;
397 class Collections$CheckedCollection;
398 class Collections$CheckedIterator;
399 class Collections$CheckedList;
400 class Collections$CheckedListIterator;
401 class Collections$CheckedMap;
402 class Collections$CheckedMap$CheckedEntrySet;
403 class Collections$CheckedRandomAccessList;
404 class Collections$CheckedSet;
405 class Collections$CheckedSortedMap;
406 class Collections$CheckedSortedSet;
407 class Collections$CopiesList;
408 class Collections$EmptyList;
409 class Collections$EmptyMap;
410 class Collections$EmptySet;
411 class Collections$LIFOQueue;
412 class Collections$MapSet;
413 class Collections$ReverseComparator;
414 class Collections$SingletonList;
415 class Collections$SingletonMap;
416 class Collections$SingletonSet;
417 class Collections$SynchronizedCollection;
418 class Collections$SynchronizedIterator;
419 class Collections$SynchronizedList;
420 class Collections$SynchronizedListIterator;
421 class Collections$SynchronizedMap;
422 class Collections$SynchronizedRandomAccessList;
423 class Collections$SynchronizedSet;
424 class Collections$SynchronizedSortedMap;
425 class Collections$SynchronizedSortedSet;
426 class Collections$UnmodifiableCollection;
427 class Collections$UnmodifiableIterator;
428 class Collections$UnmodifiableList;
429 class Collections$UnmodifiableListIterator;
430 class Collections$UnmodifiableMap;
431 class Collections$UnmodifiableMap$UnmodifiableEntrySet;
432 class Collections$UnmodifiableMap$UnmodifiableEntrySet$UnmodifiableMapEntry;
433 class Collections$UnmodifiableRandomAccessList;
434 class Collections$UnmodifiableSet;
435 class Collections$UnmodifiableSortedMap;
436 class Collections$UnmodifiableSortedSet;
438 class ConcurrentModificationException;
443 class DuplicateFormatFlagsException;
444 class EmptyStackException;
458 class EventListenerProxy;
460 class FormatFlagsConversionMismatchException;
462 class FormattableFlags;
464 class Formatter$BigDecimalLayoutForm;
465 class FormatterClosedException;
466 class GregorianCalendar;
471 class HashMap$HashEntry;
472 class HashMap$HashIterator;
478 class Hashtable$EntryEnumerator;
479 class Hashtable$EntryIterator;
480 class Hashtable$HashEntry;
481 class Hashtable$KeyEnumerator;
482 class Hashtable$KeyIterator;
483 class Hashtable$ValueEnumerator;
484 class Hashtable$ValueIterator;
485 class IdentityHashMap;
486 class IdentityHashMap$1;
487 class IdentityHashMap$2;
488 class IdentityHashMap$3;
489 class IdentityHashMap$IdentityEntry;
490 class IdentityHashMap$IdentityIterator;
491 class IllegalFormatCodePointException;
492 class IllegalFormatConversionException;
493 class IllegalFormatException;
494 class IllegalFormatFlagsException;
495 class IllegalFormatPrecisionException;
496 class IllegalFormatWidthException;
497 class InputMismatchException;
498 class InvalidPropertiesFormatException;
501 class LinkedHashMap$1;
502 class LinkedHashMap$LinkedHashEntry;
506 class LinkedList$Entry;
507 class LinkedList$LinkedListItr;
510 class ListResourceBundle;
514 class MissingFormatArgumentException;
515 class MissingFormatWidthException;
516 class MissingResourceException;
519 class NoSuchElementException;
523 class PriorityQueue$1;
525 class PropertyPermission;
526 class PropertyPermissionCollection;
527 class PropertyResourceBundle;
531 class ResourceBundle;
532 class ResourceBundle$1;
533 class ResourceBundle$BundleKey;
535 class ServiceConfigurationError;
537 class ServiceLoader$1;
539 class SimpleTimeZone;
543 class StringTokenizer;
547 class Timer$Scheduler;
548 class Timer$TaskQueue;
550 class TooManyListenersException;
559 class TreeMap$DescendingMap;
560 class TreeMap$DescendingSet;
561 class TreeMap$EntrySet;
562 class TreeMap$KeySet;
563 class TreeMap$NavigableEntrySet;
564 class TreeMap$NavigableKeySet;
566 class TreeMap$SubMap;
567 class TreeMap$SubMap$EntrySet;
568 class TreeMap$SubMap$KeySet;
569 class TreeMap$SubMap$NavigableEntrySet;
570 class TreeMap$SubMap$NavigableKeySet;
571 class TreeMap$TreeIterator;
574 class UnknownFormatConversionException;
575 class UnknownFormatFlagsException;
582 class WeakHashMap$WeakBucket;
583 class WeakHashMap$WeakBucket$WeakEntry;
584 class WeakHashMap$WeakEntrySet;
587 class AbstractExecutorService;
588 class ArrayBlockingQueue;
589 class ArrayBlockingQueue$Itr;
592 class BrokenBarrierException;
594 class CancellationException;
595 class CompletionService;
596 class ConcurrentHashMap;
597 class ConcurrentHashMap$EntryIterator;
598 class ConcurrentHashMap$EntrySet;
599 class ConcurrentHashMap$HashEntry;
600 class ConcurrentHashMap$HashIterator;
601 class ConcurrentHashMap$KeyIterator;
602 class ConcurrentHashMap$KeySet;
603 class ConcurrentHashMap$Segment;
604 class ConcurrentHashMap$ValueIterator;
605 class ConcurrentHashMap$Values;
606 class ConcurrentHashMap$WriteThroughEntry;
607 class ConcurrentLinkedQueue;
608 class ConcurrentLinkedQueue$Itr;
609 class ConcurrentLinkedQueue$Node;
611 class ConcurrentNavigableMap;
612 class ConcurrentSkipListMap;
613 class ConcurrentSkipListMap$ComparableUsingComparator;
614 class ConcurrentSkipListMap$EntryIterator;
615 class ConcurrentSkipListMap$EntrySet;
616 class ConcurrentSkipListMap$HeadIndex;
617 class ConcurrentSkipListMap$Index;
618 class ConcurrentSkipListMap$Iter;
619 class ConcurrentSkipListMap$KeyIterator;
620 class ConcurrentSkipListMap$KeySet;
621 class ConcurrentSkipListMap$Node;
622 class ConcurrentSkipListMap$SubMap;
623 class ConcurrentSkipListMap$SubMap$SubMapEntryIterator;
624 class ConcurrentSkipListMap$SubMap$SubMapIter;
625 class ConcurrentSkipListMap$SubMap$SubMapKeyIterator;
626 class ConcurrentSkipListMap$SubMap$SubMapValueIterator;
627 class ConcurrentSkipListMap$ValueIterator;
628 class ConcurrentSkipListMap$Values;
629 class ConcurrentSkipListSet;
630 class CopyOnWriteArrayList;
631 class CopyOnWriteArrayList$1;
632 class CopyOnWriteArrayList$2;
633 class CopyOnWriteArrayList$3;
634 class CopyOnWriteArrayList$RandomAccessSubList;
635 class CopyOnWriteArrayList$SubList;
636 class CopyOnWriteArraySet;
637 class CountDownLatch;
638 class CountDownLatch$Sync;
640 class CyclicBarrier$Generation;
642 class DelayQueue$Itr;
645 class Exchanger$Node;
646 class Exchanger$Slot;
647 class ExecutionException;
649 class ExecutorCompletionService;
650 class ExecutorCompletionService$QueueingFuture;
651 class ExecutorService;
659 class Executors$DefaultThreadFactory;
660 class Executors$DelegatedExecutorService;
661 class Executors$DelegatedScheduledExecutorService;
662 class Executors$FinalizableDelegatedExecutorService;
663 class Executors$PrivilegedCallable;
664 class Executors$PrivilegedCallableUsingCurrentClassLoader;
665 class Executors$PrivilegedThreadFactory;
666 class Executors$RunnableAdapter;
669 class FutureTask$Sync;
670 class LinkedBlockingDeque;
671 class LinkedBlockingDeque$AbstractItr;
672 class LinkedBlockingDeque$DescendingItr;
673 class LinkedBlockingDeque$Itr;
674 class LinkedBlockingDeque$Node;
675 class LinkedBlockingQueue;
676 class LinkedBlockingQueue$Itr;
677 class LinkedBlockingQueue$Node;
678 class PriorityBlockingQueue;
679 class PriorityBlockingQueue$Itr;
680 class RejectedExecutionException;
681 class RejectedExecutionHandler;
682 class RunnableFuture;
683 class RunnableScheduledFuture;
684 class ScheduledExecutorService;
685 class ScheduledFuture;
686 class ScheduledThreadPoolExecutor;
687 class ScheduledThreadPoolExecutor$1;
688 class ScheduledThreadPoolExecutor$DelayedWorkQueue;
689 class ScheduledThreadPoolExecutor$ScheduledFutureTask;
691 class Semaphore$FairSync;
692 class Semaphore$NonfairSync;
693 class Semaphore$Sync;
694 class SynchronousQueue;
695 class SynchronousQueue$EmptyIterator;
696 class SynchronousQueue$FifoWaitQueue;
697 class SynchronousQueue$LifoWaitQueue;
698 class SynchronousQueue$TransferQueue;
699 class SynchronousQueue$TransferQueue$QNode;
700 class SynchronousQueue$TransferStack;
701 class SynchronousQueue$TransferStack$SNode;
702 class SynchronousQueue$Transferer;
703 class SynchronousQueue$WaitQueue;
705 class ThreadPoolExecutor;
706 class ThreadPoolExecutor$AbortPolicy;
707 class ThreadPoolExecutor$CallerRunsPolicy;
708 class ThreadPoolExecutor$DiscardOldestPolicy;
709 class ThreadPoolExecutor$DiscardPolicy;
710 class ThreadPoolExecutor$Worker;
719 class TimeoutException;
724 class AtomicIntegerArray;
725 class AtomicIntegerFieldUpdater;
726 class AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl;
728 class AtomicLongArray;
729 class AtomicLongFieldUpdater;
730 class AtomicLongFieldUpdater$CASUpdater;
731 class AtomicLongFieldUpdater$LockedUpdater;
732 class AtomicMarkableReference;
733 class AtomicMarkableReference$ReferenceBooleanPair;
734 class AtomicReference;
735 class AtomicReferenceArray;
736 class AtomicReferenceFieldUpdater;
737 class AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl;
738 class AtomicStampedReference;
739 class AtomicStampedReference$ReferenceIntegerPair;
744 class AbstractOwnableSynchronizer;
745 class AbstractQueuedLongSynchronizer;
746 class AbstractQueuedLongSynchronizer$ConditionObject;
747 class AbstractQueuedLongSynchronizer$Node;
748 class AbstractQueuedSynchronizer;
749 class AbstractQueuedSynchronizer$ConditionObject;
750 class AbstractQueuedSynchronizer$Node;
756 class ReentrantLock$FairSync;
757 class ReentrantLock$NonfairSync;
758 class ReentrantLock$Sync;
759 class ReentrantReadWriteLock;
760 class ReentrantReadWriteLock$FairSync;
761 class ReentrantReadWriteLock$NonfairSync;
762 class ReentrantReadWriteLock$ReadLock;
763 class ReentrantReadWriteLock$Sync;
764 class ReentrantReadWriteLock$Sync$HoldCounter;
765 class ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter;
766 class ReentrantReadWriteLock$WriteLock;
773 class Attributes$Name;
777 class JarFile$EntryInputStream;
778 class JarFile$JarEnumeration;
779 class JarInputStream;
780 class JarOutputStream;
786 class ConsoleHandler;
789 class FileHandler$ostr;
800 class LoggingPermission;
802 class SimpleFormatter;
810 class AbstractPreferences;
811 class AbstractPreferences$1;
812 class AbstractPreferences$2;
813 class BackingStoreException;
814 class InvalidPreferencesFormatException;
815 class NodeChangeEvent;
816 class NodeChangeListener;
817 class PreferenceChangeEvent;
818 class PreferenceChangeListener;
821 class PreferencesFactory;
829 class PatternSyntaxException;
834 class CurrencyNameProvider;
835 class LocaleNameProvider;
836 class LocaleServiceProvider;
837 class TimeZoneNameProvider;
844 class CheckedInputStream;
845 class CheckedOutputStream;
847 class DataFormatException;
849 class DeflaterOutputStream;
850 class GZIPInputStream;
851 class GZIPOutputStream;
853 class InflaterInputStream;
859 class ZipFile$PartialInputStream;
860 class ZipFile$ZipEntryEnumeration;
861 class ZipInputStream;
862 class ZipOutputStream;
866 // end of output of the `classes.pl' script.
869 typedef struct java::lang::Object* jobject;
870 typedef class java::lang::Class* jclass;
871 typedef class java::lang::Throwable* jthrowable;
872 typedef class java::lang::String* jstring;
875 typedef struct _Jv_Field *jfieldID;
876 typedef struct _Jv_Method *jmethodID;
878 extern "C" jobject _Jv_AllocObject (jclass) __attribute__((__malloc__));
879 extern "C" jobject _Jv_AllocObjectNoFinalizer (jclass) __attribute__((__malloc__));
880 extern "C" jobject _Jv_AllocObjectNoInitNoFinalizer (jclass) __attribute__((__malloc__));
881 #ifdef JV_HASH_SYNCHRONIZATION
882 extern "C" jobject _Jv_AllocPtrFreeObject (jclass)
883 __attribute__((__malloc__));
885 // Collector still needs to scan sync_info
886 static inline jobject _Jv_AllocPtrFreeObject (jclass klass)
888 return _Jv_AllocObject(klass);
891 extern "C" jboolean _Jv_IsInstanceOf(jobject, jclass);
892 extern "C" jstring _Jv_AllocString(jsize) __attribute__((__malloc__));
893 extern "C" jstring _Jv_NewString (const jchar*, jsize)
894 __attribute__((__malloc__));
895 extern jint _Jv_FormatInt (jchar* bufend, jint num);
896 extern "C" jchar* _Jv_GetStringChars (jstring str);
897 extern "C" void _Jv_MonitorEnter (jobject);
898 extern "C" void _Jv_MonitorExit (jobject);
899 extern "C" jstring _Jv_NewStringUTF (const char *bytes)
900 __attribute__((__malloc__));
901 extern "C" jstring _Jv_NewStringLatin1(const char*, jsize)
902 __attribute__((__malloc__));
903 extern "C" jsize _Jv_GetStringUTFLength (jstring);
904 extern "C" jsize _Jv_GetStringUTFRegion (jstring, jsize, jsize, char *);
905 extern "C" jint _Jv_hashUtf8String (const char*, int);
906 extern bool _Jv_is_proxy (void *pc);
910 // a VM initialization option
912 // extra information associated with this option
916 struct _Jv_VMInitArgs
918 // for compatibility with JavaVMInitArgs
921 // number of VM initialization options
924 // an array of VM initialization options
925 struct _Jv_VMOption* options;
927 // true if the option parser should ignore unrecognized options
928 jboolean ignoreUnrecognized;
931 extern "C" jint _Jv_CreateJavaVM (struct _Jv_VMInitArgs*);
934 _Jv_ThreadRun (java::lang::Thread* thread);
936 _Jv_AttachCurrentThread(java::lang::Thread* thread);
937 extern "C" java::lang::Thread*
938 _Jv_AttachCurrentThread(jstring name, java::lang::ThreadGroup* group);
939 extern "C" java::lang::Thread*
940 _Jv_AttachCurrentThreadAsDaemon(jstring name, java::lang::ThreadGroup* group);
941 extern "C" jint _Jv_DetachCurrentThread (void);
943 extern "C" void _Jv_Throw (jthrowable) __attribute__ ((__noreturn__));
944 extern "C" void* _Jv_Malloc (jsize) __attribute__((__malloc__));
945 extern "C" void* _Jv_Realloc (void *, jsize);
946 extern "C" void _Jv_Free (void*);
947 extern void (*_Jv_RegisterClassHook) (jclass cl);
948 extern "C" void _Jv_RegisterClassHookDefault (jclass);
950 typedef unsigned short _Jv_ushort __attribute__((__mode__(__HI__)));
951 typedef unsigned int _Jv_uint __attribute__((__mode__(__SI__)));
952 typedef unsigned int _Jv_ulong __attribute__((__mode__(__DI__)));
954 // The type to use when treating a pointer as an integer. Similar to
956 typedef unsigned int _Jv_uintptr_t __attribute__((__mode__(__pointer__)));
961 _Jv_ushort length; /* In bytes, of data portion, without final '\0'. */
962 char data[1]; /* In Utf8 format, with final '\0'. */
964 /** Return same value of java.lang.String's hashCode. */
965 jint hash32() { return _Jv_hashUtf8String(data, length); }
966 /** Return a hash code that has at least 16 bits of information. */
967 _Jv_ushort hash16 () { return hash; }
968 /** Return a hash code that has at least 8 bits of information. */
969 _Jv_ushort hash8 () { return hash; }
970 /** Length in bytes of the UTF8-encoding. */
971 _Jv_ushort len () const { return length; }
972 /** Pointer to the first byte in the NUL-terminated UTF8-encoding. */
973 char* chars() { return data; }
974 /** Pointer to the NUL byte that terminated the UTF8-encoding. */
975 char* limit() { return data+length; }
976 /** Return the first byte in the UTF8-encoding. */
977 char first() const { return data[0]; }
978 /** Create a (non-interned) java.lang.String from this UTF8Const. */
979 jstring toString() { return _Jv_NewStringUTF(data); }
980 /** Given an UTF8 string, how many bytes needed for a UTF8Const,
981 including struct header, and final NUL. I.e. what to pas to malloc. */
982 static int space_needed (const char *, int len)
983 { return sizeof (_Jv_Utf8Const) + len + 1; }
984 /** Given an allocated _Jv_Utf8Const, copy / fill it in. */
985 void init (const char *s, int len);
986 friend jboolean _Jv_equalUtf8Consts (const _Jv_Utf8Const*, const _Jv_Utf8Const *);
987 friend jboolean _Jv_equal (_Jv_Utf8Const*, jstring, jint);
988 friend jboolean _Jv_equaln (_Jv_Utf8Const*, jstring, jint);
989 friend jboolean _Jv_equalUtf8Classnames (const _Jv_Utf8Const*,
990 const _Jv_Utf8Const*);
991 friend jboolean _Jv_isPrimitiveOrDerived (const _Jv_Utf8Const*);
992 friend _Jv_Utf8Const *_Jv_makeUtf8Const (const char*, int);
993 friend _Jv_Utf8Const *_Jv_makeUtf8Const (jstring);
994 friend jstring _Jv_NewStringUtf8Const (_Jv_Utf8Const*);
998 #endif /* __JAVAPRIMS_H__ */