|
fop 1.1 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.fop.complexscripts.bidi.InlineRun
public class InlineRun
The InlineRun
class is a utility class, the instances of which are used
to capture a sequence of reordering levels associated with an inline area.
This work was originally authored by Glenn Adams (gadams@apache.org).
| Constructor Summary | |
|---|---|
InlineRun(InlineArea inline,
int[] levels)
Primary constructor. |
|
InlineRun(InlineArea inline,
int level,
int count)
Alternate constructor. |
| Method Summary | |
|---|---|
boolean |
equals(java.lang.Object o)
|
InlineArea |
getInline()
Obtain inline area that generated this inline run. |
int |
getMaxLevel()
Obtain maximum bidi level for this run. |
int |
getMinLevel()
Obtain minimum bidi level for this run. |
int |
hashCode()
|
boolean |
isHomogenous()
Determine if this run has homogenous (same valued) bidi levels. |
boolean |
maybeNeedsMirroring()
Determine if run needs mirroring. |
void |
maybeReverseWord(boolean mirror)
Reverse inline area if it is a word area and it requires reversal. |
void |
reverse()
Reverse run (by incrementing reversal count, not actually reversing). |
java.util.List |
split()
Split this inline run into homogenous runs. |
java.lang.String |
toString()
|
void |
updateMinMax(int[] mm)
Update a min/max array to correspond with this run's min/max values. |
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Constructor Detail |
|---|
public InlineRun(InlineArea inline, int[] levels)
inline
- which generated this inline runlevels
- levels arraypublic InlineRun(InlineArea inline, int level, int count)
inline
- which generated this inline runlevel
- for each indexcount
- of indices| Method Detail |
|---|
public InlineArea getInline()
public int getMinLevel()
public int getMaxLevel()
public boolean isHomogenous()
public java.util.List split()
public void updateMinMax(int[] mm)
mm
- reference to min/max arraypublic boolean maybeNeedsMirroring()
public void reverse()
public void maybeReverseWord(boolean mirror)
mirror
- if true then also mirror characterspublic boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
|
fop 1.1 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


I'm a software engineer who is fascinated with the evolution of technology
Learning the cutting edge is exciting to me and keeps me motivated to continue to build upon my coding knowledge
I have learned and worked on the FullStack from the server to the frontend
Creating efficient based design experiences focusing on the details of everything I build is who I am and what I pride myself upon
I am an analytical and out of the box thinking software engineer with a passion for modern board games and living in the moment of a great challenge. I view that challenge as a complex puzzle to unweave and untangle. Zoning in that moment makes hours feel like minutes.
I love to analyze a situation and improve upon it. What is produced is the end goal, but I believe how it was produced, using what process, is most important. Creating a better process in development will yield fewer mistakes and returns a greater product in the long run.
Contact me using the below


Communication Package defines the number of days prior to or after which the emails generated should be sent by the system. It is Project Specific which means that the emails that are generated by the system is sent based on a particular project or an Offer so created. If communication package is not defined, the emails are sent on the default dates as mentioned below.
Activation Link - By default activation link are sent 5days prior to the first Placement Start date within the Offer.
Microsite1 - By default, Microsite1 emails are sent at the first day of each month till the Offer Validity Period.
Microsite2 - By default, Microsite2 emails are sent on the first day of the following month after the final month of Offer validity period. It might seem tricky but here is an example to further illustrate the matter. For instance, an Offer ends on February 2016. Then, Microsite2 email is sent on the first day of the following month at which the Offer expires i.e. it is sent on 1st March 2016
Microsite2 Reminder - By default, Microsite Reminder emails are sent 2 days after the Microsite 2 final email has been sent.
So, in conclusion, the days for each of the above defined email can be changed by defining the communication package. Please note that Communication Package needs to be defined before creating an Offer. Defining the same after an Offer has been created will yield no results and the emails will be sent by default.
* Click to enlarge
To define Communication Package, click on Partner Emails > Communication Package > Add Communication Package which will display fields. Each of these fields have been briefly described below
* Click to enlarge
Select Project (Required) - Select the desired Project for which communication package is to be defined
Prior Duration(days) Activation Email - Define the number of days prior to first placement start date for which Activation email is to be sent
After Duration(days) Microsite1 Monthly Email - Define the number of days after which Microsite 1 email is to be sent
After Duration(days) Microsite Final Email - Define the number of days after which Microsite 2 final email is to be sent
After Duration(days) Microsite Reminder Email - Define the number of days after which Microsite 2 reminder email is to be sent
* Click to enlarge
This page lists all the Communication Packages that were defined for email types.
The major columns that appear in the List Communication Package page are
Projects - The names of each Project for which the emails were created
Offer Activation (Days) - Lists the number of days Activation Link was intended to be sent prior to the first placement start date within an Offer neglecting the default send out dates.
Microsite1 Monthly (Days) - Lists the number of days after which Microsite1 email is intended to be sent neglecting the default send out dates.
Microsite2 Final (Days) - Lists the number of days after which Microsite2 Final email is intended to be sent neglecting the default send out dates.
Microsite2 Reminder Email (Days) - Lists the number of days after which Microsite2 Reminder email is intended to be sent neglecting the default send out dates.
Action - Lists the various actions available to the user. Each icon has been elaborated below
The edit button is used to edit the Communication Package details. Same validation rules are applied as that used while Adding Communication Package.
The delete button is used to delete any Communication Package.
* Click to enlarge
Please note that a Communication Package can be viewed/created/edited and deleted by an Admin User only. General Users and Viewers do not have access to these features.


Personal projects and research page
Contact me / Hire me
Resume: PDF
GitHub profile
Midas 2 is a Web service that runs cryptocurrency trading algorithms based on technical analysis indicators, using supervised machine learning on historical data to train its parameters. It is intended to be a properly coded, maintainable and extensible version of the original Midas, with many improvements to the original algorithm, and supporting many cryptocurrency trading pairs and exchanges, and allowing easy plugin of new currencies, exchanges and algorithms. This project is not publicly available.
Key technologies: Scala, Play Framework, Akka, PostgreSQL, Slick, REST, Machine learning, Cryptocurrency
Twinterest Explorer is an academic exercise in fast, real-time topic clustering, automatic labeling of unstructured documents, and exploration and visualization of the resulting cluster graph. The underlying algorithms are designed to be especially useful in scenarios where the quality and quantity of text of cannot be guaranteed, such as on the Social Web. This makes Twitter a great candidate for experimentation.
Key technologies: Java, REST, HTML5/CSS/JS, PostgreSQL, Redis, AngularJS, D3.js, Web Workers, Amazon EC2
Xavee is an attempt at automatically curating games on the various mobile app stores. It is commonly agreed that it is extremely difficult to find good games on these stores. Xavee's goal is to enhance app discovery and promote diamonds in the rough by re-ranking games by their quality rather than profitability, and offer comprehensive filtering tools to browse and find games more efficiently. The site is available in English and Japanese.
Key technologies: Python/Django, REST, HTML5/CSS/JS, PostgreSQL, AngularJS, Heroku
The Willy Report analyzes trading logs from the collapsed Mt. Gox Bitcoin exchange to show that fraudulent bots were likely related to Bitcoin's $1200+ price bubble and the exchange's loss of over $400 million worth of Bitcoin. The report received worldwide media attention and is still referenced on an almost daily basis within the Bitcoin community. A follow-up report by security firm WizSec, confirming the findings, is being deliberated by the Tokyo Metropolitan Police cybercrime unit and other official investigators.
Featured in: The Guardian, TechCrunch, CNBC, International Business Times, and many more.
Midas is a bot that implements a trading algorithm based on technical analysis, using supervised machine learning on historical data to train its parameters. Training is performed by using linear regression and k-fold cross-validation to avoid overfitting. It is fundamentally an EMA-based trading algorithm, but includes additional indicators and conditionals to react to certain situations more quickly and effectively.
The algorithm outperforms simple buy-and-hold and EMA trend following algorithm baselines by over 10x. It is implemented as a Chrome plugin that keeps track of price, updates parameters, and can make trades on the exchange in real-time.
Key technologies: Java, HTML/CSS/JS, Machine learning, Bitcoin, Chrome plugin development
My Ph.D research focused on topic clustering, community detection and visualization on the Social Web. Previously I was active in the Semantic Web field, working on approaches for ontology matching.


1 #ifndef FEUP_AEDA_PROJECT_BOSS_DASHBOARD_H
2 #define FEUP_AEDA_PROJECT_BOSS_DASHBOARD_H
6 #include "ui/dashboard/dashboard.h"
33 void manageStaff(std::string location = {});
39 std::string askLocationHighlight()
const;
50 void manageLocations();
60 void showStats()
const;
The boss personal area.
Definition: boss_dashboard.h:13
void show() override
Shows what the boss can do and redirect to the chosen action.
Definition: boss_dashboard.cpp:6
BossDashboard(Store &store)
Create the dashboard.
Definition: boss_dashboard.cpp:3
Class relative to the store boss.
Definition: boss.h:12
The interface from which all roles' dashboards derive.
Definition: dashboard.h:12
Class relative to a store.
Definition: store.h:30


|
Sodomy and the Supreme CourtThe excitement began on September 17 of 1998 when a neighbor, for reasons of his own, called the Harris County Texas Sheriff's department to falsely report that the man in the apartment next door was "going crazy" and had a gun. Sheriff's deputies, responding in all good faith to the call, entered said appartment and found another situation entirely -- the resident and a same sex friend going at in the throes of homosexual affection. And while this is not quite a hanging offense in Texas, it is a class C misdemeanor and will earn you a little jail time and a $500 fine.
Since the mid 1970s considerable progress has been made in striking such laws from the books, but the progress has not gone nearly as far as one might think. In 1987, the U. S. Supreme Court decreed (in Bowers v. Hardwick), that the right to privacy does not include those engaging in "homosexual sodomy."  Homosexual conduct, it was inferred, could be outlawed, monitored, and punished by the government. Meanwhile, in many various parts of the U.S. heterosexuals too could be punished for engaging in various sex acts (typically oral or anal sex) -- under sodomy laws. In 1994 the United Nations proclaimed that sodomy laws were a violation provisions of the International Covenant on Civil and Political Rights (ICCPR). Considering that the United States ratified the ICCPR, and is bound by its provisions, you might assume that this put an end to state and local sodomy laws. Wrong. As is often observed, no one pays much attention to the United Nations -- unless it could yield them a substantial Foreign Aid package. So meanwhile, archaic and horrific sodomy laws stayed on the books.  For many practitioners of the arts, this was not a problem as long as they stayed away from under age partners, public displays, video cameras, and other ways of calling attention to themselves. But for homosexuals such laws forced them to choose between living a life of nervous secrecy ("in the closet") and living their lives truthfully and in the open where they could be arrested for trangressing against sodomy laws. Some states went so far as to say that ass-fucking was fine (or at least nobody's business) between heterosexuals, but criminal between same sex partners (Arkansas, Kansas, Oklahoma, Missouri, and Maryland particularly singled out gays). Fines and jail time were not the only threats looming however. Individuals who admitted to or were accused of sodomy found themselves on extremely shaky ground when it came to adoption, foster parenting, child custody hearings, or running for public office.  "Serves 'em right."  That is, it's one thing to hold nasty little opinions about other people's sexual orientations, it's another entirely to embue uptight dweebs in conservative suits with the power to control the most intimate aspects of our existence. It sets a very bad precedence. (i.e. The next person they regulate could be you.) Furthermore, because the arguments against homosexuality and other activities covered by sodomy laws were often based on interpretations of scriptures in the Bible prohibiting sodomy -- that is, on moral standards taken from one interpretation of a particular religion's holy book. Such laws were an implicit violation of the separation of Church and State. And yet in much of the United States, state and local governments and religious conservatives continued to have exactly that kind of power -- read the laws regarding sodomy in the various 50 states. But it was all fated to change once Tyrone Garner and John Geddes Lawrence were dragged off to jail for violating Chapter 21, Sec. 21.01 of the Texas Penal Code ("A person commits an offense if he engages in deviate sexual intercourse with another individual of the same sex."). No doubt the arresting officers assumed that the two "fags" in question would simply wither away in shame under the glare of the public spotlight, pay their respective fines, and crawl back under the rock they assuredly came from. But instead Tyrone Garner and John Geddes Lawrence made a federal case out of it, literally -- taking their fight to the United States Supreme Court. On June 26, 2003 the Supreme Court of the United States blew the minds of sexually uptight bigots across the Southland by declaring that what two gay men did to each other in the privacy of their Texas apartments was nobody's business -- no matter how "unnatural" it might seem in the eyes of God and the neighbors. (Read the Supreme Court Ruling) But because such rulings set legal precedents, the effects of this decision were even farther reaching. Meaning that sodomy laws in other states are now invalid as well (except for those dealing with public acts of sodomy). And as if that were not enough, the ruling also affects past sodomy convictions, meaning that some individuals serving time or under restrictions due to conviction under sodomy laws may be able to appeal their conviction.
|


--- layout: post status: publish published: true title: Current Line Highlighting for VS2010 author: display_name: Tomas Restrepo login: tomasr email<EMAIL_ADDRESS>url: http://winterdom.com/ author_login: tomasr author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ wordpress_id: 1279 wordpress_url: http://winterdom.com/2009/06/current-line-highlighting-for-vs2010 date: '2009-06-17 02:17:22 +0000' date_gmt: '2009-06-17 02:17:22 +0000' categories: - Visual Studio tags: [] comments: - id: 904 author: Damien Guard author_email<EMAIL_ADDRESS>author_url: http://damieng.com date: '2009-06-17 04:31:20 +0000' date_gmt: '2009-06-17 04:31:20 +0000' content: "But why is Envy Code R appearing in fake-italic (oblique)...\r\n\r\n[)amien" - id: 907 author: Tomas Restrepo author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ date: '2009-06-17 12:26:17 +0000' date_gmt: '2009-06-17 12:26:17 +0000' content: Because until the editor options actually support enabling italics, I'm still using Envy Code R VS :) Too lazy to figure out a way to work around it for now. - id: 1048 author: Rene author_email<EMAIL_ADDRESS>author_url: '' date: '2009-07-23 15:44:04 +0000' date_gmt: '2009-07-23 15:44:04 +0000' content: "Hi Tomas\r\n\r\nwhat's the Name of this Theme. \r\n\r\nvery very nice.\r\nRene" - id: 1051 author: Tomas Restrepo author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ date: '2009-07-23 19:18:22 +0000' date_gmt: '2009-07-23 19:18:22 +0000' content: "@Rene: It's not yet a full theme, really. It's just something I've been using lately which is a modified version of my Distant Shores theme, but it's very rough. Might try to finish it up one of these days and post it :)" - id: 1053 author: Rene author_email<EMAIL_ADDRESS>author_url: '' date: '2009-07-24 09:00:31 +0000' date_gmt: '2009-07-24 09:00:31 +0000' content: "Great News!\r\n\r\nDistant Shores is my favorite theme at the moment. \r\n\r\nthank you" - id: 1065 author: Patrick Szalapski author_email<EMAIL_ADDRESS>author_url: http://ShareYourFaith.org date: '2009-07-31 13:22:13 +0000' date_gmt: '2009-07-31 13:22:13 +0000' content: Could this be adapted for VS2008? - id: 1066 author: Tomas Restrepo author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ date: '2009-07-31 17:15:10 +0000' date_gmt: '2009-07-31 17:15:10 +0000' content: "@Patrick: Not really... this uses the completely new extensibility model and editor features in VS2010. I know there are other plugins for VS2008 that support this feature, though (like resharper)." - id: 1073 author: Zuhaib author_email<EMAIL_ADDRESS>author_url: http://www.zuhaib.in/ date: '2009-08-06 07:16:05 +0000' date_gmt: '2009-08-06 07:16:05 +0000' content: "Gr8 Job .. Please finish the theme soon .. would love to have this theme on VS 2008 & VS 2010\r\n\r\nThanks" - id: 1167 author: Yang author_email<EMAIL_ADDRESS>author_url: '' date: '2009-10-20 01:26:51 +0000' date_gmt: '2009-10-20 01:26:51 +0000' content: "Cool,i love this theme very much!\r\nBTW：What is this font？" - id: 1168 author: Tomas Restrepo author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ date: '2009-10-20 18:15:20 +0000' date_gmt: '2009-10-20 18:15:20 +0000' content: 'The font is Damien Guard''s Envy Code R: http://damieng.com/blog/2008/05/26/envy-code-r-preview-7-coding-font-released' - id: 1474 author: Lance author_email<EMAIL_ADDRESS>author_url: '' date: '2010-05-05 09:10:03 +0000' date_gmt: '2010-05-05 09:10:03 +0000' content: How can you change the hilight color? - id: 1475 author: Tomas Restrepo author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ date: '2010-05-05 13:03:32 +0000' date_gmt: '2010-05-05 13:03:32 +0000' content: "@Lance: You can do so from the Fonts & Color section in the Tools -> Options dialog. Look for the Current Line entry." - id: 3860 author: Arsen author_email<EMAIL_ADDRESS>author_url: '' date: '2012-11-13 22:15:28 +0000' date_gmt: '2012-11-13 22:15:28 +0000' content: "Hi, \r\nGreat post, vs sdk has really poor documentation, thanks a lot for bloing about extenisions\r\n\r\nCan I somehow use IClassificationFormatMap to refresh ITextParagraphPropertiesFactoryService? I found the same question I need here(http://stackoverflow.com/questions/13249249/how-can-i-force-an-iwpftextview-to-refresh-invalidate-its-layout) anunswered, I'll really appreciate if you can take a look\r\n\r\nThanks in advance" ---
I’ve created another simple extension for Visual Studio 2010 beta 1 that will highlight the current line the caret is in with a different background color. Here’s a screenshot of the extension in action:
The extension itself is pretty simple, but it was a good way to understand how adornments for the text editor worked. I think it’s a fairly elegant mechanism that offers quite a bit of potential. A couple of things that I liked quite a bit about it:
AdornmentLayerDefinition
controls this. The other thing I found interesting about creating the sample was how you could leverage the Classifications system to integrate with the Fonts and Colors configuration options for an extension that is not a custom classifier extension.
If you look at the extension code, you’ll notice that I have a custom ClassificationFormatDefinition
named “Current Line”, which allows the user to easily change the colors used to render the current line adornment. Then, in the code, I can get the settings the user configured (or the default ones provided by the classification format) by using the IClassificationFormatMapService
.
This service gives you an IClassificationFormatMap
that provides two key things:
TextFormattingRunProperties
that contains the brushes and other settings you need to use for drawing your adornment, and Pretty cool stuff. You can grab the code for the extension from the GitHub repository.


Florida diver loses arm after collision with boat, authorities say
by Bob D'Angelo, Cox Media Group National Content DeskPALM BEACH, Fla. -
A diver lost an arm Thursday when a boat severed the limb near Palm Beach, Florida. The arm was retrieved by a U.S. Coast Guard crew, authorities said.
According to Palm Beach Fire Rescue, the incident occurred around noon. Several divers were in the water about 200 feet from the shore when a boat came in contact with them on the north end of Palm Beach Island, WPTV reported.
"A boat came along and went right over them. When they pulled him out of the water, he didn't have an arm," Samantha Marulli, of Palm Beach, told the television station. "The fireman used a paddleboard to go out with a bag to get the arm," Marulli said.
The crew of a 45-foot U.S. Coast Guard vessel assisted in turning the severed limb over to onshore first responders, the Sun-Sentinel reported.
Coast Guard Lt. Cmdr. Jason Neiman told WPTV, "The Coast Guard received a report that a Good Samaritan had located a severed arm. A Coast Guard member transferred it to the boat crew and it was transferred to the shore."
The diver was taken to an area hospital with life-threatening injuries, the television station reported.
© 2019 Cox Media Group.


BasicAnimation
public struct BasicAnimation<Value: VectorConvertible>: ValueAnimationType
Interpolates between values over a specified duration.
-
The initial value at time 0.
Declaration
Swift
fileprivate (set) public var from: Value
-
The final value when the animation is finished.
Declaration
Swift
fileprivate (set) public var to: Value
-
The duration of the animation in seconds.
Declaration
Swift
fileprivate (set) public var duration: Double
-
The timing function that is used to map elapsed time to an interpolated value.
Declaration
Swift
fileprivate (set) public var timingFunction: TimingFunctionType
-
Creates a new
BasicAnimation
instance.Declaration
Swift
public init(from: Value, to: Value, duration: Double, timingFunction: TimingFunctionType = UnitBezier(preset: .swiftOut))
Parameters
from
The value at time
0
.to
The value at the end of the animation.
duration
How long (in seconds) the animation should last.
timingFunction
The timing function to use.
-
The current value.
Declaration
Swift
fileprivate(set) public var value: Value
-
The current velocity.
Declaration
Swift
fileprivate(set) public var velocity: Value
-
Returns
true
if the advanced time is>=
duration.Declaration
Swift
public var finished: Bool
-
Advances the animation.
Declaration
Swift
public mutating func advance(_ time: Double)
Parameters
elapsed
The time (in seconds) to advance the animation.


A platform for mentorship between inspiring women in the US and young professional women in Brazil.
I want to be a mentor I want to be a mentee I want to learn more
A Hackbright Project by @mbichoffe.


|
RAMADDA User Guide
|
Data
menu, select the
Grid As Point
menu:
The Grid As Point form allows you to subset the grid at a point,
for a time range and list of variables.
Options:
Enter the latitude and longitude of the point. Click on the Show Map
link to pop up a map where you can select the point. The Clear
link removes the selection.
Set the time range for the subset. Default is all times.
Set the output format. The choices are:
If you are logged in and have permission to add files to the repository, you can optionally add the file to the repository. Specify the Folder location and a name for the file.
Select the variables that you wish to include in the output. For 3D grids, you can specify a level in the units of the original data. NOTE:Mixing 2D and 3D variables in the output may cause problems.


JF Bastien <@jfbastien>
false
Threads didn't exist before C++11
Naïve model: memory accesses are simply interleaved
Hardware doesn't work that way
Overly restrictive
Data race:
Data races are UB
1.10 Multi-threaded executions and data races
Atomic: indivisible with respect to all other atomic accesses to that object
relaxed
consume
acquire
release
acq_rel
seq_cst
relaxed
racing accesses
indivisible
enforce cache coherency
doesn't guarantee visibility
relaxed
“C++14 replaced the offensive wording with hand waving”
“it's probably incorrect if you care about the result”
— Hans Boehm
template<class T>
struct atomic;
template<>
struct atomic<integral>;
template<class T>
struct atomic<T*>;
template<class T>
struct atomic<floating-point>; // future
load
store
exchange
compare_exchange_{weak,strong}
is_lock_free
static constexpr is_always_lock_free
fetch_add
fetch_sub
fetch_and
fetch_or
fetch_xor
fetch_add
fetch_sub
fetch_add
fetch_sub
atomic_thread_fence
atomic_signal_fence
Guaranteed for std::atomic_flag
Roughly: is there a compare-exchange for this size?
This is what I'm focusing on.
What does non-lock-free mean?
struct Data { int spam, bacon, eggs; std::atomic<int> ready; };
void write(Data *d) {
d->spam = 0xBEEF;
d->bacon = 0xCAFE;
d->eggs = 0x0000;
d->ready.store(1, std::memory_order_release);
}
auto read(Data *d) {
while (!d->ready.load(std::memory_order_acquire)) ;
return std::make_tuple(d->spam, d->bacon, d->eggs);
}
Why is the language set up this way?
Provide an abstraction for relevant hardware platforms.
load relaxed | MOV |
load consume | MOV |
load acquire | MOV |
load seq_cst | MOV |
store relaxed | MOV |
store release | MOV |
store seq_cst | LOCK XCHG |
non-seq_cst fence | # free! |
seq_cst fence | MFENCE |
load relaxed | ld |
load consume | ld + dependencies |
load acquire | ld; cmp; bc; isync |
load seq_cst | hwsync; ld; cmp; bc; isync |
store relaxed | st |
store release | lwsync; st |
store seq_cst | hwsync; st |
cmpxchg relaxed | _loop: lwarx; cmp; bc _exit; stwcx.; bc _loop; _exit: |
non-seq_cst fence | lwsync |
seq_cst fence | hwsync |
load relaxed | ldr |
load consume | ldr + dependencies |
load acquire | ldr; dmb |
load seq_cst | ldr; dmb |
store relaxed | str |
store release | dmb; str |
store seq_cst | dmb; str; dmb |
cmpxchg relaxed | _loop: ldrex; mov 0; teq; strexeq; teq 0; bne _loop |
| fences | dmb |
load relaxed | ldr |
load consume | ldr + dependencies |
load acquire | ldar |
load seq_cst | ldar |
store relaxed | str |
store release | stlr |
store seq_cst | stlr |
cmpxchg relaxed | _loop: ldxr; cmp; bne _exit; stxr; cbz _loop; _exit |
| fences | dmb |
load relaxed | ld.acq |
load consume | ld.acq |
load acquire | ld.acq |
load seq_cst | ld.acq |
store relaxed | st.rel |
store release | st.rel |
store seq_cst | st.rel; mfB |
cmpxchg acquire | cmpxchg.acq |
non-seq_cst fence | # free! |
seq_cst fence | mf |
Oh, one of my favorite (NOT!) pieces of code in the kernel is the
implementation of the smp_read_barrier_depends()
macro, which
on every single architecture except for one (alpha) is a no-op.
We have basically 30 or so empty definitions for it, and I think we have something like five uses of it. One of them, I think, is performance crticial, and the reason for that macro existing.
What does it do? The semantics is that it's a read barrier between two
different reads that we want to happen in order wrt two writes on the
writing side (the writing side also has to have a smp_wmb()
to order those writes). But the reason it isn't a simple read barrier is
that the reads are actually causally *dependent*, ie we have code like
first_read = read_pointer;
smp_read_barrier_depends();
second_read = *first_read;
and it turns out that on pretty much all architectures (except for alpha), the *data*dependency* will already guarantee that the CPU reads the thing in order. And because a read barrier can actually be quite expensive, we don't want to have a read barrier for this case.
But alpha? Its memory consistency is so broken that even the data dependency doesn't actually guarantee cache access order. It's strange, yes. No, it's not that alpha does some magic value prediction and can do the second read without having even done the first read first to get the address. What's actually going on is that the cache itself is unordered, and without the read barrier, you may get a stale version from the cache even if the writes were forced (by the write barrier in the writer) to happen in the right order.
— Linus Torvalds
consume
ARM address dependency rule
LDR r1, [r0]
LDR r2, [r1]
LDR r1, [r0]
AND r1, r1, #0
LDR r2, [r3, r1]
Look ma, no barrier!
consume
maybe?
template <typename T> auto consumeLoad(const T* location) {
using Returned = typename std::remove_cv<T>::type;
struct Consumed { Returned value; size_t dependency; } ret{};
ret.value = reinterpret_cast<const volatile std::atomic<Returned>*>(
location)->load(std::memory_order_relaxed);
#if CPU(ARM)
asm volatile("eor %[dependency], %[in], %[in]"
: [dependency] "=r"(ret.dependency)
: [in] "r"(ret.value)
: "memory");
#else
std::atomic_thread_fence(std::memory_order_acquire);
ret.dependency = 0;
#endif
return ret;
}
“looks like it probably works” — Richard Smith
“(other than the aliasing violation)”
Same architecture, different instructions / performance.
Flags to the rescue: -march
, -mcpu
, -mattr
more atomic: don’t violate forward progress
less atomic: don’t add non-benign races which weren’t already present
correct programs must work under all executions an implementation is allowed to create
At least as much as the hardware could do
and maybe more 😉
We saw a few examples earlier
void inc(std::atomic<int> *y) {
*y += 1;
}
std::atomic<int> x;
void two() {
inc(&x);
inc(&x);
}
std::atomic<int> x;
void two() {
x += 2;
}
std::atomic<int> x;
void inc(int val) {
x += 1;
x += val;
}
_Z3inci:
lock incl x(%rip)
lock addl %edi, x(%rip)
template<typename T>
bool silly(std::atomic<T> *x, T expected, T desired) {
x->compare_exchange_strong(expected, desired); // Inlined.
return expected == desired;
}
template<typename T>
bool silly(std::atomic<T> *x, T expected, T desired) {
return x->compare_exchange_strong(expected, desired);
}
Works for any memory order but release
and acq_rel
template<typename T>
bool optme(std::atomic<T> *x, T desired) {
T expected = desired;
return x->compare_exchange_strong(expected, desired,
std::memory_order_seq_cst, std::memory_order_relaxed);
}
template<typename T>
bool optme(std::atomic<T> *x, T desired) {
return x->load(std::memory_order_seq_cst) == desired; // †
}
† compiler: mark transformed load as release sequence ‡
‡ as defined in section 1.10 of the C++ standard
template<typename T>
T optmetoo(std::atomic<T> *x, T y) {
T z = x->load();
x->store(y);
return z;
}
template<typename T>
T optmetoo(std::atomic<T> *x, T y) {
return x->exchange(y);
}
Hogwild!: A Lock-Free Approach to Parallelizing Stochastic Gradient Descent
float y;
void g(float a) { y += a; }
addss y(%rip), %xmm0
movss %xmm0, y(%rip)
volatile
volatile float yv;
void gv(float a) { yv += a; }
addss yv(%rip), %xmm0
movss %xmm0, yv(%rip)
std::atomic<float> x;
void f(float a) {
x.store(x.load(std::memory_order_relaxed) + a,
std::memory_order_relaxed);
}
movl x(%rip), %eax
movd %eax, %xmm1
addss %xmm0, %xmm1
movd %xmm1, %eax
movl %eax, x(%rip)
addss x(%rip), %xmm0
movss %xmm0, x(%rip)
Optimization FTW!
Inlining and constant propagation
atomic<T>::fetch_and(~(T)0)
→ atomic<T>::load()
Same for fetch_or(0)
and fetch_xor(0)
atomic<T>::fetch_and(0)
→ atomic<T>::store(0)
If simple things are hard…
…is your inline assembly correct?
…will it remain correct?
Do you trust your compiler?
What if the compiler emits suboptimal code?
std::tuple<T, T> reader() {
T d1, d2; unsigned seq0, seq1;
do {
seq0 = seq.load(std::memory_order_acquire);
d1 = data1.load(std::memory_order_relaxed);
d2 = data2.load(std::memory_order_relaxed);
std::atomic_thread_fence(std::memory_order_acquire);
seq1 = seq.load(std::memory_order_relaxed);
} while (seq0 != seq1 || seq0 & 1);
return {d1, d2};
}
void writer(T d1, T d2) {
unsigned seq0 = seq.load(std::memory_order_relaxed);
seq.store(seq0 + 1, std::memory_order_relaxed);
data1.store(d1, std::memory_order_release);
data2.store(d2, std::memory_order_release);
seq.store(seq0 + 2, std::memory_order_release);
}
We really want a release load
(there is no release load)
T d1, d2;
unsigned seq0, seq1;
do {
seq0 = seq.load(std::memory_order_acquire);
d1 = data1.load(std::memory_order_relaxed);
d2 = data2.load(std::memory_order_relaxed);
seq1 = seq.fetch_add(0, std::memory_order_release);
} while (seq0 != seq1 || seq0 & 1);
mov 0x200a76(%rip),%edx # seq
mov 0x200a74(%rip),%eax # data1
mov 0x200a72(%rip),%ecx # data2
# acquire fence
mov 0x200a64(%rip),%esi # seq
mov 0x2004c6(%rip),%ecx # seq
mov 0x2004bc(%rip),%esi # data1
xor %edx,%edx
mov 0x2004af(%rip),%r8d # data2
lock xadd %edx,0x2004af(%rip) # seq RdMW
mov 0x200a46(%rip),%edx # seq
mov 0x200a44(%rip),%eax # data1
mov 0x200a42(%rip),%ecx # data2
mfence # optimized RdMW!
mov 0x200a31(%rip),%esi # seq
Dead store elimination?
Strength reduction?
relaxed
optimization
std::atomic<int> x, y;
void relaxed() {
x.fetch_add(1, std::memory_order_relaxed);
y.fetch_add(1, std::memory_order_relaxed);
x.fetch_add(1, std::memory_order_relaxed);
y.fetch_add(1, std::memory_order_relaxed);
}
std::atomic<int> x, y;
void relaxed() {
x.fetch_add(2, std::memory_order_relaxed);
y.fetch_add(2, std::memory_order_relaxed);
}
atomic<int> progress(0);
f() {
for (i = 0; i < 1000000; ++i) {
// Heavy work, no shared memory...
++progress;
}
}
atomic<int> progress(0);
f() {
int my_progress = 0; // register allocated
for (i = 0; i < 1000000; ++i) {
// Heavy work, no shared memory...
++my_progress;
}
progress += my_progress;
}
asm volatile("":::"memory");
// eek!
std::atomic_signal_fence();
// wat?
volatile
? NO!relaxed
?std::mutex
for sanityacquire
; unlock: release
std::synchronic
to the rescue!std::mutex
Knows better
volatile
Initial motivation: getChar()
on PDP-11, reading memory-mapped KBD_STAT
I/O register
K&R: The purpose of volatile
is to force an implementation to suppress optimization that could otherwise occur
MFENCE
? ARM DMB SY
?-mserialize-volatile
-mnoserialize-volatile
When this option is enabled, GCC inserts MEMW
instructions before volatile
memory references to guarantee sequential consistency.
You can use the /volatile
compiler switch to modify how the compiler interprets this keyword. If a struct member is marked as volatile
, then volatile
is propagated to the whole structure. If a structure does not have a length that can be copied on the current architecture by using one instruction, volatile
may be completely lost on that structure.
clang emulates this with -fms-volatile
¯\_(ツ)_/¯
volatile
volatile
be lock-free?¯\_(ツ)_/¯
volatile
do RMW?No
volatile
uses?setjmp
, preserve value across longjmp
volatile sigatomic_t
may be used to communicate with a signal handler in the same threadvolatile atomic
what's that?
by compilers I mean clang
C's _Atomic
↔ C++'s std::atomic
_sync_*
builtins
_atomic_*
builtins
does little besides inlining constant memory_order_*
load atomic [volatile] <ty>, <ty>* <pointer> [singlethread] <ordering>, align <alignment>
store atomic [volatile] <ty> <value>, <ty>* <pointer> [singlethread] <ordering>, align <alignment>
atomicrmw [volatile] <operation> <ty>* <pointer>, <ty> <value> [singlethread] <ordering>
cmpxchg [weak] [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <success ordering> <failure ordering>
fence [singlethread] <ordering>
isSimple
, isVolatile
, isAtomic
: steer clear
similar to actual ISA instructions
Assume optimizations occur, encourage them.
Standardize common practice, enable to-the-metal optimizations.
More libraries: easy to use concurrency & parallelism; hard to get it wrong.
Drop assembly
File bugs
Talk to standards committee.
Use tooling: ThreadSanitizer.
Showcase your hardware’s strengths.
Get back to work!
and you should use atomics


Returns Print when “Print” was the value of the parameter passed into the current script.
LeftValues ( Get ( ScriptParameter ) ; 1 ) returns
Michael if Customers::First is "Michael".
The following example shows how to pass named parameters using the Evaluate,
Let, and
Get(ScriptParameter) functions, allowing access only to variable
“a” (the example returns
6):
The following example shows how to pass named parameters, allowing access to both variable “a” and
“b”. The simplified first parameter makes the second parameter more complex (the example returns
6, 12):


Perspektiv
MURAL VIEW
Discover RVA
more_vert
Discover RVA
close
ARTIST
AROUND THE CORNER
Mural:
Location:
Artist:
Contact:


Carousel
with controls
Carousel
with controls
Carousel
with controls
Previous
Next
Carousel
with indicators
Carousel
with indicators
Carousel
with indicators
Your browser does not support HTML5 video.


Adjust Metrics was created in 2012 by David Jonathan Ross for Font Bureau. It may or may not work the way you want it to.
Adjust both margins, left margin, or right margin...
To current glyph selection or all glyphs
In current font or a selection of opened fonts
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


@** * Yobi, Project Hosting SW * * Copyright 2013 NAVER Corp. * http://yobi.io * * @Author Keesun Baik * * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **@ @(project: Project, page: com.avaje.ebean.Page[PullRequest], condition: controllers.PullRequestApp.SearchCondition, requestType: String) @projectLayout(Messages("menu.pullRequest"), project, utils.MenuType.PULL_REQUEST) { @projectMenu(project, utils.MenuType.PULL_REQUEST, "main-menu-only")


--- layout: post title: "My Week in Review" date: 2016-07-10 08:05:00 +0000 tags: image: https://s3.amazonaws.com/audreywatters/2016-07-10-pigeon.jpg imagecredits: https://www.flickr.com/photos/nathaninsandiego/3401086236 ---
Oh god. Someone has already written the “how Pokemon Go will revolutionize education” article
— Audrey Watters (@audreywatters) July 10, 2016
Icon credits: The Noun Project


--- layout: example categories: example/v1.0.0 version: v1.0.0 title: Creating a popup from UTFGrid data description: Using UTFGrid data to populate and initialize a popup tags: - layers - tilemill ---


A simple dependency injection module.
Use the "injectable" decorator to mark your injectable service providers,
then use the "resolve" function to acquire the fully resolved top-level service object.
If your service provider extends AutoInject, then it does not need a constructor -
it can use "Constructor-less Dependency Injection", relying on the AutoInject constructor
to attach its dependencies.
Properties:
| Name | Type | Description |
|---|---|---|
injectable |
function | The dependency injection decorator function. |
autoinjectable |
function | A base class for managing "constructor-less" injection. |
resolve |
function | The service class resolver function. |
DI |
Object | A DI namespace containing the injectable() and resolve() functions and the AutoInject class. |
Examples
import {injectable} from 'effortless-di';
import {resolve} from 'effortless-di';
@injectable(Service1, ...)
class Application { constructor(service1, ...) { ... }, run() { ... } }
resolve(Application).run();
import DI from 'effortless-di';
@DI.injectable(Service1, ...)
class Application extends DI.AutoInject { run() { ... } }
DI.resolve(Application).run();


| DBIResult-class {DBI} | R Documentation |
This virtual class describes the result and state of execution of a DBMS statement (any statement, query or non-query). The result set keeps track of whether the statement produces output how many rows were affected by the operation, how many rows have been fetched (if statement is a query), whether there are more rows to fetch, etc.
Individual drivers are free to allow single or multiple active results per connection.
The default show method displays a summary of the query using other DBI generics.
Other DBI classes:
DBIConnection-class
,
DBIConnector-class
,
DBIDriver-class
,
DBIObject-class
Other DBIResult generics:
dbBind()
,
dbClearResult()
,
dbColumnInfo()
,
dbFetch()
,
dbGetInfo()
,
dbGetRowCount()
,
dbGetRowsAffected()
,
dbGetStatement()
,
dbHasCompleted()
,
dbIsReadOnly()
,
dbIsValid()
,
dbQuoteIdentifier()
,
dbQuoteLiteral()
,
dbQuoteString()
,
dbUnquoteIdentifier()


Requestor Name
Requester:
Requestor Name
Requester:
Requestor Name
Requester:
Requestor Name
Requester:
Requestor Name
Requestor Name
Requestor Name
Requestor Name


BMI is a measurement of a person's leanness and it is used to
categorize whether a person is underweight, normal weight,
overweight, or obese depending on what range the value falls
between.
Nutrients Calculator
Nutrients are compounds in foods essential to life and health,
providing us with energy, the building blocks for repair and growth
and substances necessary to regulate chemical processes. There are
six major nutrients: Carbohydrates (CHO), Lipids (fats), Proteins,
Vitamins, Minerals, Water.


Class collections.CheckedSeq
All Packages Class Hierarchy This Package Previous Next Index
Class collections.CheckedSeq
java.lang.Object
|
+----collections.CheckedCollection
|
+----collections.CheckedSeq
- public class CheckedSeq
- extends CheckedCollection
- implements UpdatableSeq
-
CheckedSeq(UpdatableSeq)
- Wrap Seq s inside a checker
-
appendElements(Enumeration)
- Checks collections.UpdatableSeq.appendElements according to its specification
-
at(int)
- Checks collections.Seq.at according to its specification
-
checkInsert(Seq, Seq, int, Object, boolean)
- Helper for checking insert*
-
checkRemoveAt(Seq, Seq, int, boolean)
- Helper for checking remov*
-
checkReplaceAt(Seq, Seq, int, Object, boolean)
- Helper for checking replac*
-
clone()
- Make a Checked clone of underlying collection
-
elements()
- Checks collections.Collection.elements according to its specification
-
first()
- Checks collections.Seq.first according to its specification
-
firstIndexOf(Object, int)
- Checks collections.Seq.firstIndexOf according to its specification
-
firstIndexOf(Object)
- Checks collections.Seq.firstIndexOf according to its specification
-
insertAt(int, Object)
- Checks collections.UpdatableSeq.insertAt according to its specification
-
insertElementsAt(int, Enumeration)
- Checks collections.UpdatableSeq.insertElementsAt according to its specification
-
insertFirst(Object)
- Checks collections.UpdatableSeq.insertFirst according to its specification
-
insertLast(Object)
- Checks collections.UpdatableSeq.insertLast according to its specification
-
insertingAt(int, Object)
- Checks collections.Seq.insertingAt.
-
last()
- Checks collections.Seq.last according to its specification
-
lastIndexOf(Object, int)
- Checks collections.Seq.lastIndexOf according to its specification
-
lastIndexOf(Object)
- Checks collections.Seq.lastIndexOf according to its specification
-
prependElements(Enumeration)
- Checks collections.UpdatableSeq.prependElements according to its specification
-
prev()
- return casted version of CheckedCollection.prev.
-
removeAt(int)
- Checks collections.UpdatableSeq.removeAt according to its specification
-
removeFirst()
- Checks collections.UpdatableSeq.removeFirst according to its specification
-
removeFromTo(int, int)
- Checks collections.UpdatableSeq.removeFromTo according to its specification
-
removeLast()
- Checks collections.UpdatableSeq.removeLast according to its specification
-
removingAt(int)
- Checks collections.Seq.removingAt.
-
replaceAt(int, Object)
- Checks collections.UpdatableSeq.replaceAt according to its specification
-
replaceFirst(Object)
- Checks collections.UpdatableSeq.replaceFirst according to its specification
-
replaceLast(Object)
- Checks collections.UpdatableSeq.replaceLast according to its specification
-
replacingAt(int, Object)
- Checks collections.Seq.replacingAt
-
subseq(int, int)
- Checks collections.Seq.subseq according to its specification
-
thys()
- return casted version of CheckedCollection.thys.
CheckedSeq
public CheckedSeq(UpdatableSeq s)
- Wrap Seq s inside a checker
clone
protected Object clone() throws CloneNotSupportedException
- Make a Checked clone of underlying collection
- Overrides:
- clone in class CheckedCollection
thys
public UpdatableSeq thys()
- return casted version of CheckedCollection.thys.
prev
public UpdatableSeq prev()
- return casted version of CheckedCollection.prev.
elements
public synchronized CollectionEnumeration elements()
- Checks collections.Collection.elements according to its specification
- Overrides:
- elements in class CheckedCollection
- See Also:
- elements
at
public synchronized Object at(int index) throws NoSuchElementException
- Checks collections.Seq.at according to its specification
- See Also:
- at
first
public synchronized Object first() throws NoSuchElementException
- Checks collections.Seq.first according to its specification
- See Also:
- first
last
public synchronized Object last() throws NoSuchElementException
- Checks collections.Seq.last according to its specification
- See Also:
- last
firstIndexOf
public synchronized int firstIndexOf(Object element,
int startingIndex)
- Checks collections.Seq.firstIndexOf according to its specification
- See Also:
- firstIndexOf
firstIndexOf
public synchronized int firstIndexOf(Object element)
- Checks collections.Seq.firstIndexOf according to its specification
- See Also:
- firstIndexOf
lastIndexOf
public synchronized int lastIndexOf(Object element,
int startingIndex)
- Checks collections.Seq.lastIndexOf according to its specification
- See Also:
- lastIndexOf
lastIndexOf
public synchronized int lastIndexOf(Object element)
- Checks collections.Seq.lastIndexOf according to its specification
- See Also:
- lastIndexOf
subseq
public synchronized Seq subseq(int index,
int length) throws NoSuchElementException
- Checks collections.Seq.subseq according to its specification
- See Also:
- subseq
insertAt
public synchronized void insertAt(int index,
Object element) throws IllegalElementException, NoSuchElementException
- Checks collections.UpdatableSeq.insertAt according to its specification
- See Also:
- insertAt
insertingAt
public synchronized Seq insertingAt(int index,
Object element) throws IllegalElementException, NoSuchElementException
- Checks collections.Seq.insertingAt.
- See Also:
- insertingAt
replaceAt
public synchronized void replaceAt(int index,
Object element) throws IllegalElementException, NoSuchElementException
- Checks collections.UpdatableSeq.replaceAt according to its specification
- See Also:
- replaceAt
replacingAt
public synchronized Seq replacingAt(int index,
Object element) throws IllegalElementException, NoSuchElementException
- Checks collections.Seq.replacingAt
- See Also:
- replacingAt
removeAt
public synchronized void removeAt(int index) throws NoSuchElementException
- Checks collections.UpdatableSeq.removeAt according to its specification
- See Also:
- removeAt
removingAt
public synchronized Seq removingAt(int index) throws NoSuchElementException
- Checks collections.Seq.removingAt.
- See Also:
- removingAt
insertFirst
public synchronized void insertFirst(Object element) throws IllegalElementException
- Checks collections.UpdatableSeq.insertFirst according to its specification
- See Also:
- insertFirst
replaceFirst
public synchronized void replaceFirst(Object element) throws IllegalElementException, NoSuchElementException
- Checks collections.UpdatableSeq.replaceFirst according to its specification
- See Also:
- replaceFirst
removeFirst
public synchronized void removeFirst() throws NoSuchElementException
- Checks collections.UpdatableSeq.removeFirst according to its specification
- See Also:
- removeFirst
insertLast
public synchronized void insertLast(Object element) throws IllegalElementException
- Checks collections.UpdatableSeq.insertLast according to its specification
- See Also:
- insertLast
replaceLast
public synchronized void replaceLast(Object element) throws IllegalElementException, NoSuchElementException
- Checks collections.UpdatableSeq.replaceLast according to its specification
- See Also:
- replaceLast
removeLast
public synchronized void removeLast() throws NoSuchElementException
- Checks collections.UpdatableSeq.removeLast according to its specification
- See Also:
- removeLast
removeFromTo
public synchronized void removeFromTo(int fromIndex,
int toIndex) throws NoSuchElementException
- Checks collections.UpdatableSeq.removeFromTo according to its specification
- See Also:
- removeFromTo
insertElementsAt
public synchronized void insertElementsAt(int index,
Enumeration e) throws IllegalElementException, CorruptedEnumerationException, NoSuchElementException
- Checks collections.UpdatableSeq.insertElementsAt according to its specification
- See Also:
- insertElementsAt
prependElements
public synchronized void prependElements(Enumeration e) throws IllegalElementException, CorruptedEnumerationException
- Checks collections.UpdatableSeq.prependElements according to its specification
- See Also:
- prependElements
appendElements
public synchronized void appendElements(Enumeration e) throws IllegalElementException, CorruptedEnumerationException
- Checks collections.UpdatableSeq.appendElements according to its specification
- See Also:
- appendElements
checkInsert
protected void checkInsert(Seq nc,
Seq oc,
int index,
Object element,
boolean verchk)
- Helper for checking insert*
checkReplaceAt
protected void checkReplaceAt(Seq nc,
Seq oc,
int index,
Object element,
boolean verchk)
- Helper for checking replac*
checkRemoveAt
protected void checkRemoveAt(Seq nc,
Seq oc,
int index,
boolean verchk)
- Helper for checking remov*
All Packages Class Hierarchy This Package Previous Next Index